环境:spark2.4.3
示例.json
{
"array0": [
{
"a": "1",
"b": "2"
},
{
"a": "3",
"b": "4"
}
]
}
我需要更改中struct的每个字段名 array0
使用spark sql api创建这样的.json:
{
"array0": [
{
"A": "1",
"B": "2"
},
{
"A": "3",
"B": "4"
}
]
}
负载:
val source = spark.read.format("json").option("multiLine", "true").load("/home/user/Desktop/example.json")
由于一些规范,我不得不用api生成我的结构 struct
这里,还有 named_struct
不是api,所以我不能使用它)
val my_struct = struct(col("x.a").as("A"), col("x.b").as("B"))
因为spark2.4.3转换api中的cos还不受支持,所以我用 expr()
功能
val my_transform = expr("transform("+"array0,"+"x->"+my_struct.expr.sql+")")
它抛出:
org.apache.spark.sql.catalyst.parser.ParseException:
extraneous input 'AS' expecting {')', ','}(line 1, pos 58)
看来 expr()
不支持 my_struct.expr.sql
. 我很困惑。
那么我怎样才能给一个正确的structsql字符串呢 expr()
?
或者其他任何人能给我的解决方案?
谢谢您。
3条答案
按热度按时间imzjd6km1#
另一种选择-如果你想和
transform
###加载提供的数据4jb9z9bj2#
你不需要
transform
只需重命名字段,就可以使用schema dsl。重命名结构的最短方法是:它给出:
也可以将新模式的
DataType
eagi6jfj3#
你试过直接用这个吗