首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Spark read.json在python中不考虑布尔值。

Spark read.json在python中不考虑布尔值。
EN

Stack Overflow用户
提问于 2018-06-27 07:36:41
回答 2查看 684关注 0票数 3

我一直在尝试遵循官方文档here,在spark中完成一个将JSON字符串转换为dataframe的例子。

下面的案例运行良好:

jsonStrings = ['{"name":"Yin","address":{"city":"Columbus","state":true}}']
otherPeopleRDD = sc.parallelize(jsonStrings)
otherPeople = spark.read.json(otherPeopleRDD)
otherPeople.show()

====== OUTPUT =======
+----------------+----+
|         address|name|
+----------------+----+
|[Columbus, true]| Yin|
+----------------+----+

root
 |-- address: struct (nullable = true)
 |    |-- city: string (nullable = true)
 |    |-- state: boolean (nullable = true)
 |-- name: string (nullable = true)

但是当我尝试传递布尔值True (在python中适用)时,我得到了一个错误:

jsonStrings = ['{"name":"Yin","address":{"city":"Columbus","state":True}}']
otherPeopleRDD = sc.parallelize(jsonStrings)
otherPeople = spark.read.json(otherPeopleRDD)
otherPeople.show()

====== OUTPUT =======
+--------------------+
|     _corrupt_record|
+--------------------+
|{"name":"Yin","ad...|
+--------------------+

root
 |-- _corrupt_record: string (nullable = true)

给出一些背景信息。我正在使用python中的请求库调用REST api来获取JSON数据。然后在响应上调用.json()得到json字符串。这给了我一个json字符串,其中布尔值是大写的,就像在python中一样。(true变成True,false变成False)我认为这是所需的行为,但当将此json传递给spark时,它会抱怨JSON字符串的格式,如下所示。

resp = requests.get(url, params=query_str, cookies=cookie_str)
jsonString = resp.json()

我已经阅读了文档并在网上搜索,但没有找到任何可能有帮助的东西。有人能帮帮我吗!

更新:我找到了一个可能的解释。这可能是因为python中的JSON库提供了json编码和解码。Link,但这仍然不能解释为什么pyspark不能识别python json编码。

EN

回答 2

Stack Overflow用户

发布于 2018-06-27 09:59:36

使用json模块:

import json

spark_friendly_json = json.dumps(resp.json())
otherPeopleRDD = sc.parallelize(spark_friendly_json)
otherPeople = spark.read.json(otherPeopleRDD)
票数 1
EN

Stack Overflow用户

发布于 2018-06-27 11:49:50

它给出了错误,因为spark无法将您的数据转换为所需的数据类型。因为您提供的是大写形式的T。在python中读取Jain时,请将值转换为小写true,它将按照前面提到的那样工作。你的代码没有问题。您还可以使用任何其他数据类型重新创建错误。在你的例子中,spark是在推断模式,但它失败了。您可以显式提供schema或将True保留在引号内,以便它将其视为字符串。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51052695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档