Spark SQL嵌套JSON错误:
{
"x":{
"name":"bla",
"address":"bla bla",
"age":"16"
},
"666":{
"name":"not working",
"address":"not good",
"age":"16"
}
}
当读取spark.sql(“从表中选择cast(x.age为long)作为age_t”)时将起作用,但是:spark.sql(“从表中选择cast(x.age作为long_age)作为age_t”)会抛出异常:
org.apache.spark.sql.catalyst.parser.ParseException: 输入'cast(666.age
当我为myDF.select(“ 666.age”)使用datafame api时,它的工作。 任何有体面的解释的人:)
答案 0 :(得分:3)
这是因为SQL列名应该以字母或其他字符(例如_
,@
或#
)开头,而不是数字开头。我们来看一个简单的例子:
Seq((1, 2)).toDF("x", "666").createOrReplaceTempView("test")
呼叫spark.sql("SELECT x FROM test").show()
将会输出
+---+
| x|
+---+
| 1|
+---+
但调用spark.sql("SELECT 666 FROM test").show()
会输出
+---+
|666|
+---+
|666|
+---+
因为666
被解释为文字,而不是列名。要解决此问题,需要使用backticks来引用列名:
spark.sql("SELECT `666` FROM test").show()
+---+
|666|
+---+
| 2|
+---+