我有一个JSON流,其结构如下,转换为dataframe
{
"a": 3936,
"b": 123,
"c": "34",
"attributes": {
"d": "146",
"e": "12",
"f": "23"
}
}
数据框显示函数导致以下输出
sqlContext.read.json(jsonRDD).show
+----+-----------+---+---+
| a| attributes| b| c|
+----+-----------+---+---+
|3936|[146,12,23]|123| 34|
+----+-----------+---+---+
如何将属性列(嵌套JSON结构)拆分为 attributes.d,attributes.e和attributes.f 作为 seperate 列到新数据框中,所以我可以在新数据框中将列作为a,b,c,attributes.d,attributes.e和attributes.f吗?
答案 0 :(得分:2)
如果您希望从a
到f
命名的列:
df.select("a", "b", "c", "attributes.d", "attributes.e", "attributes.f")
如果您希望以attributes.
前缀命名的列:
df.select($"a", $"b", $"c", $"attributes.d" as "attributes.d", $"attributes.e" as "attributes.e", $"attributes.f" as "attributes.f")
如果列的名称是从外部源提供的(例如配置):
val colNames: Seq("a", "b", "c", "attributes.d", "attributes.e", "attributes.f")
df.select(colNames.head, colNames.tail: _*).toDF(colNames:_*)
答案 1 :(得分:1)
使用attributes.d表示法,您可以创建新列,并在DataFrame中使用它们。查看Java中的withColumn()方法。
答案 2 :(得分:0)
使用Python
将结果保存到新文件。
hh