pyspark 数据框“条件应该是字符串或列”

Posted

技术标签:

【中文标题】pyspark 数据框“条件应该是字符串或列”【英文标题】:pyspark dataframe "condition should be string or Column" 【发布时间】:2019-02-02 06:42:18 【问题描述】:

我无法对数据框使用过滤器。我不断收到错误“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)

报错如下: ""cannot resolve 'productType' given input columns""条件应该是字符串或列"

在 jist 中,我正在尝试使用 pyspark 而不是 scal 来解决以下链接中给出的问题 3。下面的 url 中还提供了数据集。 https://acadgild.com/blog/spark-use-case-travel-data-analysis?fbclid=IwAR0fgLr-8aHVBsSO_yWNzeyh7CoiGraFEGddahDmDixic6wmumFwUlLgQ2c

我应该能够只为 productType 值 1 获得所需的结果

【问题讨论】:

【参考方案1】:

由于您没有引用数据框的变量,因此最简单的方法是使用字符串条件:

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)

【讨论】:

第二种方法工作正常,但第一种方法仍然出错。 answerthree = df.select("toLocation").groupBy("toLocation").count().filter("productType = 1").sort("count", ascending=False).take(10) 错误:“不能在给定输入列的情况下解析“productType”:[toLocation, count];第 1 行 pos 0;

以上是关于pyspark 数据框“条件应该是字符串或列”的主要内容,如果未能解决你的问题,请参考以下文章

在 PySpark 数据框中拆分字符串

Pyspark 删除数据框列中的多个字符

使用 json 字符串值和模式创建 pyspark 数据框

从 pyspark 数据框中的列中提取特定字符串

在单个 spark 数据框中减去两个字符串列的最佳 PySpark 实践是啥?

从 pyspark 数据框字符串列中获取第一个数值到新列中