【问题标题】:How to express a column which name contains spaces in Spark SQL?如何在 Spark SQL 中表示名称包含空格的列?
【发布时间】:2022-01-09 17:35:23
【问题描述】:

我们尝试用方括号 [column name]、单引号和双引号以及反引号将列名括起来,但它们都不起作用。

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

【问题讨论】:

    标签: apache-spark pyspark apache-spark-sql


    【解决方案1】:

    反引号似乎工作得很好:

    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 ..."""
    • 谢谢它成功了。反引号 (`) 将完成这项工作。
    • 1) 你用的是什么 spark 版本> 看起来像旧的。 2) 使用sc.parallelize 它可以工作,但是当我尝试spark.read.schema(schema).parquet("D:\\path") 时,即使我用空格指定架构时也会出错。
    【解决方案2】:

    不要像在 T-SQL [column name] 中那样使用括号,而是使用 反引号 来包装列名 `column name`。这是您运行 SQL 的时候。您还可以在 spark SQL 中使用反引号来包装列名,但使用 zero323 回答的三引号。

    【讨论】:

      猜你喜欢
      • 2010-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-17
      相关资源
      最近更新 更多