Python 使用查找结构搜索pyspark数据帧
我是PySpark的新手,我正在尝试创建一个泛型.where()函数,它可以接受任何查找结构,并使用该结构检查值是否存在Python 使用查找结构搜索pyspark数据帧,python,apache-spark,pyspark,apache-spark-sql,Python,Apache Spark,Pyspark,Apache Spark Sql,我是PySpark的新手,我正在尝试创建一个泛型.where()函数,它可以接受任何查找结构,并使用该结构检查值是否存在 TYPES=('TYPE_1'、'TYPE_2'、'TYPE_3') 大概是这样的: ( 在哪里( 类型中的df.value ) ) 最有效的方法是什么?您可以从查找结构构造一个数组列,并使用array\u contains筛选该列是否包含结构中的元素 e、 g 谢谢你,你知道还有其他方法吗?@Bob另一种方法可能是使用UDF,但它会比使用本机Spark SQL函数的方法
TYPES=('TYPE_1'、'TYPE_2'、'TYPE_3')
大概是这样的:
(
在哪里(
类型中的df.value
)
)
最有效的方法是什么?您可以从查找结构构造一个数组列,并使用
array\u contains
筛选该列是否包含结构中的元素
e、 g
谢谢你,你知道还有其他方法吗?@Bob另一种方法可能是使用UDF,但它会比使用本机Spark SQL函数的方法慢。我一直在读有关UDF的文章。好的,知道这一点很好-在您的回答中,不返回真/假表,您如何返回正确的
列。只需在末尾添加一个过滤器:df.withColumn('contains',F.array_contains(F.array(*[F.lit(i)表示arr中的i]),F.col filter('contains=1')
dict也可以这样做吗?还是元组?
>>> df = spark.createDataFrame([(1,),(2,),(3,)],['column'])
>>> arr = [2,3,4]
>>> df.withColumn('contains', F.array_contains(F.array(*[F.lit(i) for i in arr]), F.col('column'))).show()
+------+--------+
|column|contains|
+------+--------+
| 1| false|
| 2| true|
| 3| true|
+------+--------+