Pyspark将同一密钥的多个记录转换为单个记录

Pyspark将同一密钥的多个记录转换为单个记录,pyspark,Pyspark,我有一个如下的数据框- [行(账号=1,地址=NewYork')、行(账号=1,地址=1,地址=hotel road')、行(账号=1,地址=1345')、行(账号=2,地址=NewJersey')、行(账号=2,地址=3421')] 我想把它变成- [行(账号=1,地址为纽约市,地址为酒店路,地址为邮政地址为1345'),行(账号=2,地址为新泽西市,地址为邮政地址为3421')] 请建议最好的方法来做到这一点 使用id上的.pivot,groupBy将记录转换为单个记录 df=spark.c

我有一个如下的数据框-

[行(账号=1,地址=NewYork')、行(账号=1,地址=1,地址=hotel road')、行(账号=1,地址=1345')、行(账号=2,地址=NewJersey')、行(账号=2,地址=3421')]

我想把它变成- [行(账号=1,地址为纽约市,地址为酒店路,地址为邮政地址为1345'),行(账号=2,地址为新泽西市,地址为邮政地址为3421')]


请建议最好的方法来做到这一点

使用
id
上的
.pivot
groupBy
将记录转换为单个记录

df=spark.createDataFrame([("1","address_city","NewYork"),("1","address_address1","hotel road"),("1","address_postal","1345"),("2","address_city","NewJersey"),("2","address_postal","3421")],["id","value","name"])

#+---+----------------+----------+
#| id|           value|      name|
#+---+----------------+----------+
#|  1|    address_city|   NewYork|
#|  1|address_address1|hotel road|
#|  1|  address_postal|      1345|
#|  2|    address_city| NewJersey|
#|  2|  address_postal|      3421|
#+---+----------------+----------+

df.groupBy("id").pivot("value").agg(first("name")).show()
#+---+----------------+------------+--------------+
#| id|address_address1|address_city|address_postal|
#+---+----------------+------------+--------------+
#|  1|      hotel road|     NewYork|          1345|
#|  2|            null|   NewJersey|          3421|
#+---+----------------+------------+--------------+

df.groupBy("id").pivot("value").agg(first("name")).collect()
#[Row(id=u'1', address_address1=u'hotel road', address_city=u'NewYork', address_postal=u'1345'), Row(id=u'2', address_address1=None, address_city=u'NewJersey', address_postal=u'3421')]

如果你不知道,你能提供一些精确的数据帧样本吗;t Mind在问题中更新了Hi-Shu。。感谢您提供的解决方案,但我收到了以下错误:pyspark.sql.utils.AnalysisException:“数据透视列地址有10000多个不同的值,这可能表示有错误。如果有意这样做,请将spark.sql.pivotMaxValues至少设置为透视列的不同值数。;'@RAVITEJASATYAVADA,尝试设置值
spark.sql(“set spark.sql.pivotMaxValues=1000000”).show()
,然后再次运行代码!