如何维护DataFrame中的键值的顺序与JSON相同?
问题描述:
样品JSON数据:如何维护DataFrame中的键值的顺序与JSON相同?
{ “名称”: “dev的”, “工资”:100, “职业”: “ENGG”, “地址”: “诺依”}
{“名“: ”KARTHIK“,” 工资 “:200,” 职业 “: ”ENGG“,” 地址“: ”布洛尔“}
星火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 |
+-------+-------+----------+------+
列按字母顺序排列。 有什么办法维持自然秩序?
答
您可以在阅读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);
答
你有两个选择
- 根据您的JSON数据的顺序创建架构和应用 在阅读它,
- 从表中,你想要的顺序选择字段。
更好的选择是在读取输入时使用模式。
我想你可以通过选择来做到这一点,正如这个问题的答案所示http://stackoverflow.com/questions/35556146/is-there-a-way-to-get-the-column-names按顺序从一个json文件中的sparksql – Mehrez
@Mehrez谢谢梅赫雷斯。我也问Spark社区。有人回答同样的问题。 –