【问题标题】:PySpark Sql with column name containing dash/hyphen in itPySpark Sql 列名中包含破折号/连字符
【发布时间】:2020-09-15 09:47:30
【问题描述】:

我有 PySpark 数据框 df

data = {'Passenger-Id': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5},'Age': {0: 22, 1: 38, 2: 26, 3: 35, 4: 35}}
df_pd = pd.DataFrame(data, columns=data.keys())
df = spark.createDataFrame(df_pd)
+------------+---+
|Passenger-Id|Age|
+------------+---+
|           1| 22|
|           2| 38|
|           3| 26|
|           4| 35|
|           5| 35|
+------------+---+

这行得通

   df.filter(df.Age == 22).show()

但下面不起作用,因为 - 在列名中

    df.filter(df.Passenger-Id == 2).show()

AttributeError: 'DataFrame' 对象没有属性 'Passenger'

我在 spark sql 中也面临同样的问题,

        spark.sql("SELECT  Passenger-Id FROM AutoMobile").show()

        spark.sql("SELECT  automobile.Passenger-Id FROM AutoMobile").show()

遇到错误

AnalysisException:无法解析“Passenger”给定的输入列:[automobile.Age,automobile.Passenger-Id]

按照某些来源的建议,尝试用单引号给出列名,现在它只打印查询中提到的列

  spark.sql("SELECT  'Passenger-Id' FROM AutoMobile").show()
+------------+
|Passenger-Id|
+------------+
|Passenger-Id|
|Passenger-Id|
|Passenger-Id|
|Passenger-Id|
|Passenger-Id|
+------------+

【问题讨论】:

    标签: python apache-spark pyspark


    【解决方案1】:

    由于列名中有 hiphen,我建议你使用来自sql.functionscol() 函数

    import pyspark.sql.functions as F
    df.filter(F.col('Passenger-Id')== 2).show()
    

    这是结果

    +------------+---+
    |Passenger-Id|Age|
    +------------+---+
    |           2| 38|
    +------------+---+
    

    sql语法不行,你需要使用特殊字符“`”而不是单引号,如下所示

    df.createOrReplaceTempView("AutoMobile")
    spark.sql("SELECT  * FROM AutoMobile where `Passenger-Id`=2").show()
    

    【讨论】:

      猜你喜欢
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      相关资源
      最近更新 更多