使用句点访问列名称 - Spark SQL 1.3

时间:2015-05-20 20:15:09

标签: apache-spark apache-spark-sql

我有一个DataFrame,其中的字段包含句点。当我尝试对它们使用select()时,Spark无法解决它们,可能是因为'。'用于访问嵌套字段。

这是错误:

  

enrichData.select(" google.com&#34)   org.apache.spark.sql.AnalysisException:无法解析' google.com'给定输入列google.com,yahoo.com,....

有没有办法访问这些列?或者更改列名称的简单方法(因为我无法选择它们,如何更改名称?)。

2 个答案:

答案 0 :(得分:1)

您可以删除架构并重新创建它,而不使用以下句点:

val newEnrichData = sqlContext.createDataFrame(
  enrichData.rdd, 
  StructType(enrichData.schema.fields.map(sf => 
    StructField(sf.name.replace(".", ""), sf.dataType, sf.nullable)
  ))
)

答案 1 :(得分:0)

在列名中包含句点使spark假设其为嵌套字段,即字段中的字段。为了解决这个问题,您需要使用反引号“`”。这应该起作用:

scala> val df = Seq(("yr", 2000), ("pr", 12341234)).toDF("x.y", "e")
df: org.apache.spark.sql.DataFrame = [x.y: string, e: int]

scala> df.select("`x.y`").show
+---+
|x.y|
+---+
| yr|
| pr|
+---+

您需要添加反引号(`)