PySpark SQL,列名称中包含破折号/连字符

时间:2020-09-15 09:47:30

标签: python apache-spark pyspark

我有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,automotive.Passenger-Id]

尝试使用某些引用中的单引号来命名列名,现在它只打印查询中提到的列

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

1 个答案:

答案 0 :(得分:2)

由于列名中包含hiphen,所以建议您使用col()中的sql.functions函数

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()