#python #apache-spark #pyspark
#python #apache-spark #pyspark
Вопрос:
У меня есть PySpark dataframe 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()
Ошибка атрибута: объект ‘DataFrame’ не имеет атрибута ‘Passenger’
Я тоже сталкиваюсь с такой же проблемой в spark sql,
spark.sql("SELECT Passenger-Id FROM AutoMobile").show()
spark.sql("SELECT automobile.Passenger-Id FROM AutoMobile").show()
Получение ошибки ниже
Исключение AnalysisException: не удается разрешить ‘ Passenger
‘ заданные входные столбцы: [автомобиль.Возраст, автомобиль.Passenger-Id]
Попытался указать имя столбца в одинарных кавычках, как рекомендуется в некоторых источниках, теперь он просто печатает столбец, упомянутый в запросе
spark.sql("SELECT 'Passenger-Id' FROM AutoMobile").show()
------------
|Passenger-Id|
------------
|Passenger-Id|
|Passenger-Id|
|Passenger-Id|
|Passenger-Id|
|Passenger-Id|
------------
Ответ №1:
Поскольку у вас есть hiphen в имени столбца, я предлагаю вам использовать col()
функцию из sql.functions
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()
Комментарии:
1. Для меня сработало приведенное ниже, двойные кавычки внутри одинарной кавычки. импортируйте pyspark.sql.functions как F df.filter(F.col(‘»Passenger-Id»‘)== 2).показать()
Ответ №2:
Для меня сработало приведенное ниже, двойные кавычки внутри одинарной кавычки.
import pyspark.sql.functions as F
df.filter(F.col('"Passenger-Id"')== 2).show()