提问人:punky 提问时间:8/7/2023 更新时间:8/7/2023 访问量:57
Spark - 将包含特殊字符的字符串加载到 Spark 数据帧中
Spark - load string containing special characters into a Spark dataframe
问:
我在这里有以下情况 - 我正在使用 urllib.request 库从 API 获取结果:
response = compatible_urllib.urlopen(request).read()
作为回应,我得到了以下字符串化JSON:
response = '{"result":[{"kanalID":1,"kanal":"TV","kanalLongName":"TV","kanalNumber":"XTV1","thumbnail":"empty","externalID":1,"lastUpdate":"none"},{"kanalID":2,"kanal":"Mre\u017ea","kanalLongName":"Mre\u017ea","kanalNumber":"XTV2","thumbnail":"empty","externalID":2,"lastUpdate":"none"}]}'
问题出在字符串“Mre\u017ea”的一部分上,该字符串最终应该显示在数据库中,例如 - Mreža,因为 \u017e 是字符 ž 的表示形式。
我正在使用 Spark 数据帧处理来自 API 的结果,当我按以下方式执行时:
channels_json = ast.literal_eval(response)
df = spark.read.json(spark.sparkContext.parallelize([channels_json ]), schema=schema_struct)
作为 df,我在 dataframe 和数据库 (Hive) 中得到进一步的结果,但 \u017e 显示为 \\u017e。
有人建议我使用 json.loads 而不是 literal_eval,但是当我像这样使用它时:
channels_json_b = json.loads(response)
channels_json_b的值为:
{u'result': [{u'lastUpdate': u'none', u'kanal': u'TV', u'kanalID': 1, u'kanalLongName': u'TV', u'externalID': 1, u'kanalNumber': u'XTV1', u'thumbnail': u'empty'}, {u'lastUpdate': u'none', u'kanal': u'Mre\u017ea', u'kanalID': 2, u'kanalLongName': u'Mre\u017ea', u'externalID': 2, u'kanalNumber': u'XTV100001608', u'thumbnail': u'empty'}]}
但是,如果我尝试将此JSON(channels_json_b)加载到数据帧中,则会得到空数据帧:
df = spark.read.json(spark.sparkContext.parallelize([channels_json_b]), schema=schema_struct)
在尝试将此 JSON 信息加载到数据帧之前,我是否需要执行其他操作? 我想问题不在我正在使用的模式中,因为当使用 literal_eval 而不是 json.loads 时,它可以正常工作
答: 暂无答案
评论