我从外部文件创建了一个dataframe df,它具有以下模式:
(id,field1,field2,field3)分区列:id
数据示例为
000, 11_field1, 22_field2, 33_field3
001, 111_field1, 222_field2, 333_field3
我想从df创建另一个dataframe,其中schema是
(id, fieleName, fieldValue)
数据示例为
000, field1, 11_field1
000, field2, 22_field2
000, field3, 33_field3
001, field1, 111_field1
001, field2, 222_field2
001, field3, 333_field3
有人能告诉我怎么得到新的Dataframe吗?
1条答案
按热度按时间vom3gejh1#
你可以在
pyspark
如下所示使用explode
选项首先导入必要的库和函数
假设你的数据框是
df
.如果你这样做了
df.show()
你应该得到如下结果然后将所有要分解的列Map为2列。这里您希望除id之外的所有列都分解。所以,做下面这些
然后转换
data frame
至rdd
就像下面一样要检查rdd是如何Map的,请执行以下操作
你会得到如下结果
然后转换
rdd
回到adata frame
说df2
```df2 = sqlContext.createDataFrame(rdd)
+---+--------------------+
| id| val|
+---+--------------------+
| 0|Map(field3 -> 33_...|
| 1|Map(field3 -> 333...|
+---+--------------------+
df2.registerTempTable('mytempTable')
df3 = sqlContext.sql( """select id,explode(val) AS (fieldname,fieldvalue) from mytempTable""")
+---+---------+----------+
| id|fieldname|fieldvalue|
+---+---------+----------+
| 0| field3| 33_field3|
| 0| field2| 22_field2|
| 0| field1| 11_field1|
| 1| field3|333_field3|
| 1| field2|222_field2|
| 1| field1|111_field1|
+---+---------+----------+