pyspark dataframe "условие должно быть строкой или столбцом" - PullRequest
0 голосов
/ 02 февраля 2019

Я не могу использовать фильтр для фрейма данных.я продолжаю получать сообщение об ошибке "TypeError (" условие должно быть строкой или столбцом ")"

Я попытался изменить фильтр для использования объекта col.Тем не менее, это не работает.

path = 'dbfs:/FileStore/tables/TravelData.txt'
data = spark.read.text(path)
from pyspark.sql.types import StructType, StructField, IntegerType , StringType, DoubleType
schema = StructType([
  StructField("fromLocation", StringType(), True),
  StructField("toLocation", StringType(), True),
  StructField("productType", IntegerType(), True)
])
df = spark.read.option("delimiter", "\t").csv(path, header=False, schema=schema)
from pyspark.sql.functions import col
answerthree = df.select("toLocation").groupBy("toLocation").count().sort("count", ascending=False).take(10)  # works fine
display(answerthree)

Я добавляю фильтр к переменной "answerthree" следующим образом:

answerthree = df.select("toLocation").groupBy("toLocation").count().filter(col("productType")==1).sort("count", ascending=False).take(10)

Выдает ошибку следующим образом: "" не удается разрешить "productType 'заданные входные столбцы "" условие должно быть строкой или столбцом "

В jist я пытаюсь решить проблему 3, приведенную в приведенной ниже ссылке, используя pyspark вместо scal. Набор данных также представлен в приведенном ниже URL. https://acadgild.com/blog/spark-use-case-travel-data-analysis?fbclid=IwAR0fgLr-8aHVBsSO_yWNzeyh7CoiGraFEGddahDmDixic6wmumFwUlLgQ2c

Я смогу получить желаемый результат только для значения productType 1

1 Ответ

0 голосов
/ 02 февраля 2019

Поскольку у вас нет переменной, ссылающейся на фрейм данных, проще всего использовать строковое условие:

answerthree = df.select("toLocation").groupBy("toLocation").count()\
                .filter("productType = 1")\
                .sort(...

В качестве альтернативы, вы можете использовать переменную фрейма данных и использовать фильтр на основе столбцов:

count_df = df.select("toLocation").groupBy("toLocation").count()
answerthree = count_df.filter(count_df['productType'] == 1)\
                      .sort("count", ascending=False).take(10)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...