我需要使用pyspark重新格式化表格。原始表格的格式如下,
+---+---------+-----+
| ID|attribute|value|
+---+---------+-----+
| 1| name| luke|
| 1| age| 24|
| 2| name| mark|
| 2| age| 22|
| 1| salary| 70|
| 2| salary| 69|
+---+---------+-----+
我想将其重新格式化为如下格式。
+---+-----+---+------+
| ID| name|age|salary|
+---+-----+---+------+
| 1| luke| 24| 70|
| 2| mark| 22| 69|
+---+-----+---+------+
每条记录具有大约1000个属性(名称,年龄等)。我尝试将自联接用于此任务,
# each record have ~1000 attributes
attribs = ['name', 'age', 'salary', ...]
target_df = df.filter("attribute='%s'" %attribs[0])\
.select('ID', 'value')\
.withColumnRenamed('value', 'name')
for attr in attribs[1:]:
target_df = target_df.join(
df.filter("attribute='%s'" %attr)\
.select('ID', 'value')\
.withColumnRenamed('value', attr),
on='ID', how='inner')
target_df.show()
不幸的是,我出现了stackoverflow(是的,错误)。我确信通过for循环的数据帧的行是固定的。当spark加入表时会发生什么?而且这种方法非常缓慢,有更好的方法吗?非常感谢!