2017-05-01 51 views
1

我有一个RDD看起来像这样如何从PySpark中的RDD创建数据框?

[((0, Row(event_type_new=u'ALERT|VEHICLE_HEALTH_DATA|CHANGE_IN_HEALTH|DTC|B109F|', day=u'Fri')), 0), 
((1, Row(event_type_new=u'ALERT|VEHICLE_HEALTH_DATA|CHANGE_IN_HEALTH|DTC|B1115|HIGH MOUNTED STOP LAMP CONTROL', day=u'Sat')), 2)] 

其具有索引,行对象(event_type_newday),接着是预测(整数)。如何创建包含3列的DataFrame,包括event_type_new,dayPrediction

我正在使用Spark 1.6.2和PySpark API。

谢谢!

回答

1

首先将您的列表转换为RDD。然后将每个元素映射到。您可以将列表到数据帧轻松使用.toDF()方法

from pyspark.sql import Row 

ls = [((0, Row(event_type_new=u'ALERT|VEHICLE_HEALTH_DATA|CHANGE_IN_HEALTH|DTC|B109F|', day=u'Fri')), 0), 
     ((1, Row(event_type_new=u'ALERT|VEHICLE_HEALTH_DATA|CHANGE_IN_HEALTH|DTC|B1115|HIGH MOUNTED STOP LAMP CONTROL', day=u'Sat')), 2)] 
ls_rdd = sc.parallelize(ls) 
ls_row = ls_rdd.map(lambda x: Row(**{'day': str(x[0][1].day), 'event_type': str(x[0][1].event_type_new), 'prediction': int(x[1])})) 
df = ls_row.toDF() 

当你运行df.show(),它看起来就像这样:

+---+--------------------+----------+ 
|day|   event_type|prediction| 
+---+--------------------+----------+ 
|Fri|ALERT|VEHICLE_HEA...|   0| 
|Sat|ALERT|VEHICLE_HEA...|   2| 
+---+--------------------+----------+ 
+1

不得不在地图上明确定义类型,使其工作。像这样ls_rdd.map(lambda x:Row(** {'day':str(x [0] [1] .day),'event_type':str(x [0] [1] .event_type_new),'prediction ':int(x [1])})) – Isaac

+0

谢谢@Isaac!我会根据评论更新解决方案。我的Spark版本是2.1,我猜它隐含推断数据类型。 – titipata

0

我假设这是一个collected RDD,因为它看起来像你有一个list与元组的和int对象。您可以通过以下得到你想要的输出:

from pyspark.sql import Row 


lst = [((0, Row(event_type_new=u'ALERT|VEHICLE_HEALTH_DATA|CHANGE_IN_HEALTH|DTC|B109F|', day=u'Fri')), 0), 
     ((1, Row(event_type_new=u'ALERT|VEHICLE_HEALTH_DATA|CHANGE_IN_HEALTH|DTC|B1115|HIGH MOUNTED STOP LAMP CONTROL', day=u'Sat')), 2)] 

output = [] 
for row in lst: 
    vals = tuple(row[0][1]) + (row[1],) 
    fields = row[0][1].__fields__ + ['prediction'] 
    row = Row(*vals) 
    row.__fields__ = fields 
    output.append(row) 

df = sc.parallelize(output).toDF() 
df.show() 

你应该得到类似以下内容:

+---+--------------------+----------+ 
|day|  event_type_new|prediction| 
+---+--------------------+----------+ 
|Fri|ALERT|VEHICLE_HEA...|   0| 
|Sat|ALERT|VEHICLE_HEA...|   2| 
+---+--------------------+----------+ 

我希望这有助于。

相关问题