我有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|
+------------+
由于列名中有hiphen,我建议您使用sql.functions
中的col()
函数
import pyspark.sql.functions as F
df.filter(F.col('Passenger-Id')== 2).show()
这是的结果
+------------+---+
|Passenger-Id|Age|
+------------+---+
| 2| 38|
+------------+---+
Noe对于sql语法,需要使用特殊字符"`"不是单一报价,就像下面的
df.createOrReplaceTempView("AutoMobile")
spark.sql("SELECT * FROM AutoMobile where `Passenger-Id`=2").show()
下面的方法对我很有效,单引号中有双引号。
import pyspark.sql.functions as F
df.filter(F.col('"Passenger-Id"')== 2).show()