【问题标题】:How to maintain order of key-value in DataFrame same as JSON?如何保持 DataFrame 中键值的顺序与 JSON 相同?
【发布时间】:2017-09-21 01:56:10
【问题描述】:

示例 JSON 数据:

{"name": "dev","salary": 100,"occupation": "engg","address": "noida"}
{"name": "karthik","salary": 200,"occupation": "engg","address": "blore"}

Spark Java 代码:

DataFrame df = sqlContext.read().json(jsonPath);
df.printSchema();
df.show(false);

输出:

root
 |-- address: string (nullable = true)
 |-- name: string (nullable = true)
 |-- occupation: string (nullable = true)
 |-- salary: long (nullable = true)


+-------+-------+----------+------+
|address|name   |occupation|salary|
+-------+-------+----------+------+
|noida  |dev    |engg      |10000 |
|blore  |karthik|engg      |20000 |
+-------+-------+----------+------+

列按字母顺序排列。 有什么办法可以维持自然秩序?

【问题讨论】:

    标签: java json apache-spark apache-spark-sql


    【解决方案1】:

    您可以在阅读json时提供schema,它将保持顺序。

    StructType schema = DataTypes.createStructType(new StructField[] { 
        DataTypes.createStructField("name", DataTypes.StringType, true),
        DataTypes.createStructField("salary", DataTypes.IntegerType, true),
        DataTypes.createStructField("occupation", DataTypes.StringType, true),
        DataTypes.createStructField("address", DataTypes.StringType, true)});
    
    DataFrame df = sqlContext.read().schema(schema).json(jsonPath);
    df.printSchema();
    df.show(false);
    

    【讨论】:

      【解决方案2】:

      你有两个选择

      1. 根据你的json数据的顺序创建一个schema并应用 一边读一边
      2. 从表格中选择字段作为您想要的顺序。

      更好的选择是在读取输入时使用模式。

      【讨论】:

        猜你喜欢
        • 2020-08-10
        • 2021-11-08
        相关资源
        最近更新 更多