scala - started - spark python
Cómo escapar de los nombres de columnas con guiones en Spark SQL (3)
He importado un archivo json en Spark y lo convertí en una tabla como
myDF.registerTempTable("myDF")
Entonces quiero ejecutar consultas SQL en esta tabla resultante
val newTable = sqlContext.sql("select column-1 from myDF")
Sin embargo, esto me da un error debido a Hypen en el nombre de la columna column-1
. ¿Cómo puedo resolver esto es Spark SQL?
Backticks (`) parecen funcionar, por lo
val newTable = sqlContext.sql("select `column-1` from myDF")
debería hacer el truco, al menos en Spark v1.3.x.
Estuvo un poco ayer, resulta que hay una manera de escapar de (:) y a (.) Como tal:
Solo el campo que contiene (:) necesita ser escapado con backticks
sqlc.select("select `sn2:AnyAddRq`.AnyInfo.noInfo.someRef.myInfo.someData.Name AS sn2_AnyAddRq_AnyInfo_noInfo_someRef_myInfo_someData_Name from masterTable").show()
No puedo comentar ya que tengo menos de 50 representantes
Cuando hace referencia a una estructura json con struct.struct.field y hay un espacio de nombres presente como:
ns2: struct.struct.field los backticks (`) no funcionan.
jsonDF = sqlc.read.load(''jsonMsgs'', format="json")
jsonDF.registerTempTable("masterTable")
sqlc.select("select `sn2:AnyAddRq.AnyInfo.noInfo.someRef.myInfo.someData.Name` AS sn2_AnyAddRq_AnyInfo_noInfo_someRef_myInfo_someData_Name from masterTable").show()
pyspark.sql.utils.AnalysisException: u "no se puede resolver '' sn2:AnyAddRq.AnyInfo.noInfo.someRef.myInfo.someData.Name
''
Si elimino los campos sn2:, la consulta se ejecuta.
También he intentado con comillas simples (''), barras invertidas (/) y comillas dobles ("")
La única forma en que funciona si registro otra tabla temporal en el sn2: strucutre, puedo acceder a los campos dentro de ella como tal
anotherDF = jsonDF.select("sn2:AnyAddRq.AnyInfo.noInfo.someRef.myInfo.someData")
anotherDF.registerTempTable("anotherDF")
sqlc.select("select Name from anotherDF").show()