我一直在尝试遵循官方文档here之后在Spark中将JSON字符串转换为数据帧的示例。
以下情况可以正常工作:
BrowserWindow
但是当我尝试传递布尔值True(适用于python)时出现错误:
osname
给出一些背景。我正在调用REST API,以使用python中的 requests 库获取JSON数据。然后我得到响应的json字符串,调用.json()。这给了我一个json字符串,其中布尔值被大写,就像在python中一样。 (true变为True,false变为False)。我认为这是理想的行为,但是当将此json传递给spark时,它会抱怨JSON字符串的格式,如上所示。
cves.html
我已经阅读了文档并搜索了网络,但没有找到任何可能有用的信息。有人可以帮我吗!
更新:我找到了一种可能的解释。这可能是由于python中的json库提供了JSON编码和解码。 Link 但这仍然不能解释为什么pyspark无法识别python json编码。
答案 0 :(得分:0)
使用json
模块:
import json
spark_friendly_json = json.dumps(resp.json())
otherPeopleRDD = sc.parallelize(spark_friendly_json)
otherPeople = spark.read.json(otherPeopleRDD)
答案 1 :(得分:0)
出现错误是因为spark无法将您的数据转换为所需的数据类型。当您提供大写字母T时。在用Python阅读Jain时,请将值转换为小写true,它将如前所述工作。您的代码没有问题。您还可以使用任何其他数据类型重新创建该错误。在您的情况下,spark推断出架构,但失败了。您可以显式提供架构,也可以在引号内保留True,以便将其视为字符串。