spark/pyspark的增强python数据帧
smartframes的Python项目详细描述
spark/pyspark的增强python数据帧
动机
spark数据框架为具有模式的数据集提供了一个很好的接口。在python中,将代码中的数据放入dataframe意味着创建一个row()对象,该对象具有字段名和相应的值。假设您已经有了一个每个字段都有数据类型的模式,那么很容易获得一个表示行的对象并自动创建row()对象。
SmartFrames允许您通过创建表示字段和数据类型的架构来定义类。然后可以创建一个对象,并像其他任何python类一样设置值。当您准备好将其存储在数据帧中时,只需调用createRow()方法。
createRow()方法将任何值强制为正确的数据类型,例如,如果字段定义为integerType,并且类中设置的值是字符串,则它将在创建row()之前尝试将字符串转换为整数。
这是在使用长数据类型创建row()时编写的,发现spark在向jvm传递值时没有将整数转换为长整数。我需要一种一致的方式来为我的所有数据帧创建row()。
安装
pip install smartframes
示例
只需创建一个扩展自SmartFrame的类,并将架构定义为结构字段的排序列表。如果row()对象是用不同顺序的字段创建的,那么将模式排序为spark出错是很重要的。奇怪,但却是真的。
SkipSelectedFields是创建select()语句时通常不会选择的字段名列表。
classSimpleTable(SmartFrames):schema=StructType(sorted([StructField("pk_id",IntegerType()),StructField("first_name",StringType()),],key=lambdax:x.name))skipSelectedFields=[]...s1=SimpleTable()s1.pk_id=1s1.first_name='Don's2=SimpleTable()s2.pk_id=2s2.first_name='Dan'df=self.sqlCtx.createDataFrame(self.sc.parallelize([s1.createRow(),s2.createRow()]),s1.schema)
释放量
Version | Date | Notes |
---|---|---|
1.1.0 | 10/6/2015 | Performance improvements |
1.0.1 | 10/3/2015 | First release of smartframes |