我在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
1条答案
按热度按时间flvlnr441#
尝试在filter语句中使用pyspark列函数。
另一个想法是确保使用大于运算符(
>
)的列是数字。如果它们不是数字,它可能会返回一些有趣的结果。filter.apply
不是pysparkfilter
命令的选项关于pyspark
filter
的更多信息:https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/api/pyspark.sql.DataFrame.filter.html