我有一个DataFrame,其中的字段包含句点。当我尝试对它们使用select()时,Spark无法解决它们,可能是因为'。'用于访问嵌套字段。
这是错误:
enrichData.select(" google.com&#34) org.apache.spark.sql.AnalysisException:无法解析' google.com'给定输入列google.com,yahoo.com,....
有没有办法访问这些列?或者更改列名称的简单方法(因为我无法选择它们,如何更改名称?)。
答案 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|
+---+
您需要添加反引号(`)