簡體   English   中英

如何從PySpark中的RDD創建數據框?

[英]How to create a dataframe from a RDD in 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)]

它具有一個索引,一個Row對象( event_type_newday ),后跟一個預測(整數)。 如何創建包含3列的event_type_new ,包括event_type_newdayPrediction

我正在使用Spark 1.6.2和PySpark API。

謝謝!

首先將您的列表轉換為RDD。 然后將每個元素映射到Row 您可以使用.toDF()方法輕松將Row列表轉換為.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|
+---+--------------------+----------+

我以為這是一個collected RDD ,因為它看起來像您有一個包含Rowint對象組合的元組的list 您可以使用以下命令獲得所需的輸出:

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

我希望這有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM