列为“结构”类型时如何将文件写入csv?

时间:2019-08-12 05:23:57

标签: dataframe struct pyspark writetofile

我有一个输出spark数据框,需要将其写入CSV。数据框中的列为“结构”类型,csv不支持。我正在尝试将其转换为字符串或转换为DF熊猫,但无济于事。

userRecs1=userRecs.withColumn("recommendations", explode(userRecs.recommendations))


#userRecs1.write.csv('/user-home/libraries/Sampled_data/datasets/rec_per_user.csv')

预期结果:建议列为字符串类型,以便可以将其拆分为两个单独的列并写入csv。

实际结果: (建议列为struct类型,无法写入csv)

 ID_CTE|  recommendations|
+-------+-----------------+
|3974081| [2229,0.8915096]|
|3974081| [2224,0.8593609]|
|3974081| [2295,0.8577902]|
|3974081|[2248,0.29922757]| 
|3974081|[2299,0.28952467]|

2 个答案:

答案 0 :(得分:0)

以下命令会将您的StructType 展平到单独的命名列中:

userRecs1 \
  .select('ID_CTE', 'recommendations.*') \
  .write.csv('/user-home/libraries/Sampled_data/datasets/rec_per_user.csv')

答案 1 :(得分:0)

另一个选择是将struct列转换为json,然后保存:

from pyspark.sql import functions as f
userRecs1 \
  .select(f.col('ID_CTE'), f.to_json(f.col('recommendations.'))) \
  .write.csv('/user-home/libraries/Sampled_data/datasets/rec_per_user.csv')