Dataframe 筛选数组值列上的PySpark数据帧内容

Dataframe 筛选数组值列上的PySpark数据帧内容,dataframe,apache-spark,pyspark,apache-spark-sql,Dataframe,Apache Spark,Pyspark,Apache Spark Sql,我的模式如下: DataFrame[record_id: string, months: array<decimal(2,0)>, max_amount: decimal(12,2)] 我想在months列下过滤数组中存在的值的数据(例如:获取列表中具有month值6的所有行)。我尝试了以下方法,这些方法适用于字符串值: import pyspark.sql.functions as sf my_df.filter(sf.array_contains(my_df['months'

我的模式如下:

DataFrame[record_id: string, months: array<decimal(2,0)>, max_amount: decimal(12,2)]
我想在months列下过滤数组中存在的值的数据(例如:获取列表中具有month值6的所有行)。我尝试了以下方法,这些方法适用于字符串值:

import pyspark.sql.functions as sf

my_df.filter(sf.array_contains(my_df['months'], 6)).show()
但在int数组的情况下,我得到以下错误:

org.apache.spark.sql.AnalysisException: cannot resolve 'array_contains(`months`, 6)' due to data type mismatch: Input to function array_contains should have been array followed by a value with same element type, but it's [array<decimal(2,0)>, int].
org.apache.spark.sql.AnalysisException:由于数据类型不匹配,无法解析“array_contains(`months`,6)”:函数array_contains的输入应该是array后面跟一个元素类型相同的值,但它是[array,int]。

我还尝试使用
isin()
,但它不起作用。我是否必须修改作为
数组\u contains()
中的第二个参数传递的整数值才能使其工作?请建议。

您收到此错误,因为6是整数类型,数组中的值是十进制(2,0)。它应该是这样的my_df.filter(sf.array_contains(my_df['months',],sf.lit(6)。“decimal(38,0)”).show()它甚至可以通过在这里添加一个点来工作:my_df.filter(sf.array_contains(my_df['months',6.)。show()@ggagliano我用6.0试过,但后来它认为它是“双精度”数据类型,而不是十进制。好的,我不能尝试,但是像这样的东西应该可以实现我的_-df.filter('array_-contains(“months”,decimal(6)))。show()在这种情况下,将这两个解决方案作为答案发布,这样每个人都可以很容易地找到它们;)
org.apache.spark.sql.AnalysisException: cannot resolve 'array_contains(`months`, 6)' due to data type mismatch: Input to function array_contains should have been array followed by a value with same element type, but it's [array<decimal(2,0)>, int].