我有一个Pyspark RDD,如下图所示,我如何将其转换为pandas数据框。
rdd.take(3)
['REVISION 6 233188 AmericanSamoa 2001-01-19T01:12:51Z ip:office.bomis.com ip:office.bomis.com\nCATEGORY\nIMAGE\nMAIN\nTALK\nUSER\nUSER_TALK\nOTHER\nEXTERNAL\nTEMPLATE\nCOMMENT *\nMINOR 0\nTEXTDATA 1516',
'REVISION 6 133180191 AmericanSamoa 2007-05-24T14:41:33Z Ngaiklin 4477979\nCATEGORY\nIMAGE\nMAIN\nTALK\nUSER\nUSER_TALK\nOTHER\nEXTERNAL\nTEMPLATE R_from_CamelCase\nCOMMENT Robot: Automated text replacement (-\\[\\[(.*?[\\:|\\|])*?(.+?)\\]\\] +\\g<2>)\nMINOR 1\nTEXTDATA 5',
'REVISION 8 233189 AppliedEthics 2001-01-20T15:01:12Z ip:pD950754B.dip.t-dialin.net ip:pD950754B.dip.t-dialin.net\nCATEGORY\nIMAGE\nMAIN\nTALK\nUSER\nUSER_TALK\nOTHER\nEXTERNAL\nTEMPLATE\nCOMMENT *\nMINOR 1\nTEXTDATA 9']
我使用了下面的片段,但输出是在一列下。
df = rdd.map(lambda x: str(x)).map(lambda w: w.split(' ')).toDF()
输出。
+--------------------+
| _1|
+--------------------+
|REVISION 6 233188...|
|REVISION 6 133180...|
要把它转换为Pandas DataFrame,请使用以下方法 toPandas()
.
toDF()
将RDD转换为PySpark DataFrame(你需要它来最终转换为pandas)。
# Splitting by `\n`
an_rdd = rdd.map(lambda x: str(x)).map(lambda w: w.split('\n'))
# Creating columns recursively using dictionary
spark_df = an_rdd.map(lambda x: {'column_{}'.format(idx) : val
for (idx, val) in enumerate(x)}).map(lambda x: Row(**x)).toDF()
# Converting to pandas
pandas_df = spark_df.toPandas()