json 文件模式/对象以触发模式以加载数据帧

Posted

技术标签:

【中文标题】json 文件模式/对象以触发模式以加载数据帧【英文标题】:json file schema/object to spark schema for loading dataframe 【发布时间】:2018-07-13 16:37:07 【问题描述】:

我必须使用 pySpark 将大量文件加载到配置单元表中。有多个不同的 json 文件包含数据和定义文件数据模式的单独文件。在不传递模式的情况下加载文件时,数据列会乱序,这就是我想创建模式的原因。 Json 文件如下所示:

data: 'col1': 'ASDFG', 'col2': 'ASDXC'...

schema: 'description': 'filename', 'type': 'object', 'properties': 'col1': 'type': 'string', 'col2': 'type': 'string, 'col3': 'type': 'string ...

我的想法是将此文件作为字典读取,提取“属性”键值作为列名和数据类型,然后以某种方式生成用于将火花数据帧加载到配置单元的架构。还有其他选择吗?如果你们中的任何人遇到过这种情况,我将非常感谢您的帮助或提供一些示例。

谢谢。

【问题讨论】:

【参考方案1】:

你说它们乱序,但那是因为 python dicts 没有顺序(最新版本除外)。

你可以改用OrderedDict,他们会保持原来的顺序:

from collections import OrderedDict
data = json.loads(my_json, object_pairs_hook=OrderedDict)

【讨论】:

我所说的乱序的意思是,例如,当数据加载到 hive 时,必须在第 1 列中的数据是为什么不同的列。我将所有数据直接传递给 spark 数据框,并且似乎列名的排序方式与文件中的顺序不同。这就是为什么我想创建模式,我想在加载数据时传递它以将所有内容都保存在配置单元中。 @AdasKavaliauskas 你是如何在 hive 中加载数据的?您是否尝试过使用 OrderedDicts 但它不起作用? 不,我没有尝试过 OrderedDicts。我正在使用 SparkContext 读取 json 以创建数据框,然后写入配置单元。应该先用json.loads?

以上是关于json 文件模式/对象以触发模式以加载数据帧的主要内容,如果未能解决你的问题,请参考以下文章

Spark:如何解析嵌套列表的 JSON 字符串以触发数据框?

如何在加载页面时触发缓存文件?

在页面加载时触发此脚本

添加按钮以在 Chumper Datatable 行中触发引导模式

如何匹配 aws cloudwatch 日志中的多个模式以触发 lambda

让 ajax 加载的部分视图中的元素触发 jquery 事件(引导模式形式)