Skip to main content
 首页 » 编程设计

python之如何从 PySpark 中的 RDD 创建数据框

2024年08月20日39kuangbin

我有一个像这样的 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)] 

它有一个索引,一个 Row 对象(event_type_new 和 day),后跟一个预测(整数)。如何创建一个包含 3 列的 DataFrame,包括 event_type_new、day 和 Prediction。

我正在使用带有 PySpark API 的 Spark 1.6.2。

谢谢!

请您参考如下方法:

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

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| 
+---+--------------------+----------+