tutorial started spark software getting scala apache-spark apache-spark-sql

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()