从pyspark.sql查询中获取有效json文档的最佳方法是什么。 例如,如果我运行:
spark.sql("show tables")
我看到它返回一个数据帧,我可以在其上调用“ toJSON”来获得RDD。但我找不到将其转换为json文档的好方法。我在上面调用了“ collect()”,但这不会返回有效的json,而且似乎不是将数据帧转换为json的最有效方法。
答案 0 :(得分:1)
一种实现方法是将JSON RDD编写为文本文件。 JSON格式正确。
df.toJSON().saveAsTextFile("/tmp/jsonRecords")
请注意,这将为每个分区写入一个文件。因此,需要手动将它们连接起来。
该方法改编自使用Scala的答案here。
答案 1 :(得分:0)
我使用以下方法得到json响应:
def exec_spark_sql_query(query):
json_rdd = spark.sql(query).toJSON()
rdd_list = json_rdd.collect()
output_json = ''
for i, entry in enumerate(rdd_list):
if (i == 0):
output_json = output_json + '['
if (i == len(rdd_list) - 1):
return (output_json + entry + ']')
output_json = output_json + entry + ','
return output_json
我知道这绝对不是获取使用SparkSQL执行SQL查询的Python API调用的json响应的最佳方法,但这可以完成工作。