pyspark 在AWS Glue piepline中执行筛选时出错

vcudknz3  于 2023-10-15  发布在  Spark
关注(0)|答案(1)|浏览(89)

我在AWS GLUE中运行一个查询,并使用FILTER选项将输出加载到4个不同的文件中,如下所示:

df = glueContext.read.format("jdbc").option("driver", jdbc_driver_name).option("url", db_url).option("query", query).option("user", db_username).option("password", db_password).load()
filtered_df0 = df.filter("ORDR_DOC_TYPE='0005'")
filtered_df1 = df.filter("ORDR_DOC_TYPE='0001'")
filtered_df2 = df.filter("ORDR_DOC_TYPE='0003'")
filtered_df3 = df.filter("(ORDR_STTS_CD)='9000' AND (LN_ITEM_REL_QTY)>'0.00' AND (col1)>=(col2)")

我得到的数据到4个不同的文件使用上述4个过滤器。第四个过滤条件:

(col1) >= (col2)

引起了一些问题没有失败,但我得到了计数不匹配。然后我试着修改这个文件,如下所示:

filtered_df3 = Filter.apply(frame = df, f = lambda x: x["col1"]>=x["col2"])

当我运行这个,胶水作业是失败的,由于以下错误:

TypeError: DataFrame.filter() takes 2 positional arguments but 6 were given

我已经尽力了。但没找到。有人能帮我修一下吗??help

flvlnr44

flvlnr441#

尝试在filter语句中使用pyspark列函数。

from pyspark.sql.functions import col

filtered_df3 = df.filter((col(ORDR_STTS_CD)== "9000") &
                           (col(LN_ITEM_REL_QTY) > 0.00) &
                           (col(col1) >= col(col2)))

另一个想法是确保使用大于运算符(>)的列是数字。如果它们不是数字,它可能会返回一些有趣的结果。
filter.apply不是pyspark filter命令的选项
关于pyspark filter的更多信息:https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrame.filter.html

相关问题