Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 使用句点访问列名-Spark SQL 1.3_Apache Spark_Apache Spark Sql - Fatal编程技术网

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

Apache spark 使用句点访问列名-Spark SQL 1.3,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我有一个包含句点的字段的数据帧。当我尝试对它们使用select()时,Spark无法解析它们,可能是因为“.”用于访问嵌套字段 以下是错误: enrichData.select(“google.com”) org.apache.spark.sql.AnalysisException:无法解析给定输入列google.com、yahoo.com等的“google.com” 有没有办法访问这些列?或者是一种更改列名的简单方法(因为我无法选择列名,如何更改列名?)您可以删除架构并重新创建它,而不需要像这

我有一个包含句点的字段的数据帧。当我尝试对它们使用select()时,Spark无法解析它们,可能是因为“.”用于访问嵌套字段

以下是错误:

enrichData.select(“google.com”) org.apache.spark.sql.AnalysisException:无法解析给定输入列google.com、yahoo.com等的“google.com”


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

您可以删除架构并重新创建它,而不需要像这样的句点:

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

列名称中有一个句点使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|
+---+

你需要在后面打勾(`)