我正在查询spark sql,如下所示,并尝试将列合并到一行中:
interalexternalid = spark.sql("""Select InternalId, ExternalId from datatable limit 4""")
jsonDf = interalexternalid.select(to_json(struct([interalexternalid[x] for x in interalexternalid.columns])).alias("body"))
display(jsonDf)
我得到的数据如下:
"body"
{"InternalId":480941,"ExternalId":"a020H00001Tt7NrQAJ"}
{"InternalId":480942,"ExternalId":"a020H00001Tt7NsQAJ"}
{"InternalId":480556,"ExternalId":"a020H00001TdAEVQA3"}
{"InternalId":480557,"ExternalId":"a020H00001TdAEWQA3"}
我的目标是在“正文”列中获得如下数据
“正文”:
[{"InternalId": 480941}, {"ExternalId": "a020H00001Tt7NrQAJ"}]
[{"InternalId": 480942}, {"ExternalId": "a020H00001Tt7NsQAJ"}]
[{"InternalId": 480556}, {"ExternalId": "a020H00001TdAEVQA3"}]
[{"InternalId": 480557}, {"ExternalId": "a020H00001TdAEWQA3"}]
如何才能做到这一点。我在上面的上下文中使用python。但python和scala解决方案都会有所帮助。 谢谢
使用
array
方法代替struct
,因为需要body
作为数组。并使用create_map
创建从列名到值的映射:相关问题 更多 >
编程相关推荐