如何在Spark SQL中表示列名包含空格的列?

32

我们尝试使用方括号[column name]、单引号和双引号以及反引号来包装列名,但都无法正常工作。

Spark SQL是否支持包含空格的列名?

2个回答

62

反引号似乎可以很好地工作:

scala> val df = sc.parallelize(Seq(("a", 1))).toDF("foo bar", "x")
df: org.apache.spark.sql.DataFrame = [foo bar: string, x: int]
scala> df.registerTempTable("df")

scala> sqlContext.sql("""SELECT `foo bar` FROM df""").show
foo bar
a  

DataFrame API 相同:

scala> df.select($"foo bar").show
foo bar
a   

看起来它是被支持的,不过我怀疑它并不被推荐。


如果列是分层的,那么你可以像这样选择:""" select parent.foo bar ...""" - spats
谢谢,它起作用了。反引号(`)会起作用。 - MukeshKoshyM
  1. 你使用的Spark版本是什么?看起来是旧版本。
  2. 使用sc.parallelize可以正常工作,但当我尝试使用spark.read.schema(schema).parquet("D:\\path")时,即使我指定了带空格的模式,也会出现错误。
- Cherry

27

在运行SQL时,不要像T-SQL那样使用方括号[列名],而是使用反引号来包含列名`列名`。在Spark SQL中,您也可以使用反引号来包含列名,但需要使用三个引号,如zero323所回答的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接