阵列列上的Pyspark Pandas UDF系列操作

jvlzgdj9  于 2023-03-22  发布在  Spark
关注(0)|答案(1)|浏览(134)

我有一个这样的 Dataframe

data_df = spark.createDataFrame([([1,2,3],'val1'),([4,5,6],'val2')],['col1','col2'])

Col1.   Col2
[1,2,3] val1
[4,5,6] val2

我想从列1数组中获取最小值。预期结果如下所示:

Col1
1
4

我实现了以下Pandas UDF,但我得到了错误:

**

从UDF引发异常:'Assert错误:Pandas SCALAR_ITER UDF输出的行比输入行多。

**

我不知道哪里错了?

def generate_min(batch_iter: Iterator[pd.Series]) -> Iterator[pd.Series]:
  
  for x in batch_iter:
    yield min(x)

generate__udf = pandas_udf(generate_min, returnType=IntegerType())

data_df.select(generate_min(F.col('col1'))
b91juud3

b91juud31#

您的数据框(data_df):

+---------+----+
|     Col1|Col2|
+---------+----+
|[1, 2, 3]|val1|
|[4, 5, 6]|val2|
+---------+----+

使用array_min() pyspark内置函数从数组列中获取最小元素。

from pyspark.sql.functions import array_min

data_df.select(
    array_min("Col1").alias("Col1")
).show()

输出

+----+
|Col1|
+----+
|   1|
|   4|
+----+

相关问题