Pyspark将同一密钥的多个记录转换为单个记录
我有一个如下的数据框- [行(账号=1,地址=NewYork')、行(账号=1,地址=1,地址=hotel road')、行(账号=1,地址=1345')、行(账号=2,地址=NewJersey')、行(账号=2,地址=3421')] 我想把它变成- [行(账号=1,地址为纽约市,地址为酒店路,地址为邮政地址为1345'),行(账号=2,地址为新泽西市,地址为邮政地址为3421')]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
请建议最好的方法来做到这一点 使用
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()
,然后再次运行代码!