如何维护DataFrame中键值的顺序与JSON相同?

时间:2017-04-24 11:44:19

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

示例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 |
+-------+-------+----------+------+

列按字母顺序排列。 有没有办法保持自然秩序?

2 个答案:

答案 0 :(得分:1)

您可以在阅读schema时提供json并保持订单。

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);

答案 1 :(得分:1)

你有两个选择

  1. 根据您的json数据的顺序创建一个架构并应用 阅读时和
  2. 从表格中选择所需的字段。
  3. 更好的选择是在阅读输入时使用模式。