【问题标题】:json file schema/object to spark schema for loading dataframejson 文件模式/对象以触发模式以加载数据帧
【发布时间】: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} ...

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

谢谢。

【问题讨论】:

    标签: python json dataframe hive pyspark


    【解决方案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?
    猜你喜欢
    • 2018-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 2015-07-29
    相关资源
    最近更新 更多