Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 是否可以使用熊猫UDF转换包?_Pandas_Apache Spark_Pyspark Dataframes - Fatal编程技术网

Pandas 是否可以使用熊猫UDF转换包?

Pandas 是否可以使用熊猫UDF转换包?,pandas,apache-spark,pyspark-dataframes,Pandas,Apache Spark,Pyspark Dataframes,是否可以在包(即结构数组)上使用UDF实现聚合操作(例如,求和、平均值、方差等),以替代高阶函数 例如,使用高阶函数,我可以实现行李的平均值,如下所示 df = df.withColumn("average_field", expr("aggregate(bag['bag_field'], (cast( '0' as double) as sum, cast( '0' as double) as n), (acc, x) -> (acc.sum + x, acc.n + 1), acc -

是否可以在包(即结构数组)上使用UDF实现聚合操作(例如,求和、平均值、方差等),以替代高阶函数

例如,使用高阶函数,我可以实现行李的平均值,如下所示

df = df.withColumn("average_field", expr("aggregate(bag['bag_field'], (cast( '0' as double) as sum, cast( '0' as double) as n), (acc, x) -> (acc.sum + x, acc.n + 1), acc -> acc.sum / acc.n * 1.0)"))
import pandas as pd
from pyspark.sql.functions import pandas_udf, PandasUDFType

def pavg(v):
    return v.mean() 

udf_avg = pandas_udf(pavg, functionType=PandasUDFType.GROUPED_AGG, returnType=DoubleType())

my_original_fields = df.columns
df = df.groupBy(my_original_fields).agg(udf_avg(df.bag['bag_field'])).alias("average_field")
df.show()
这个实现的问题是,我必须实现平均值,而不能使用库的现有实现。相比之下,使用pandas UDF很有吸引力,因为我可以利用pandas和numpy库函数,同时使用apachearrow最小化(反)序列化开销

我尝试了udf,但它对我不起作用,因为我在将包传递到udf时会收到大小不匹配错误,在传递包['bag_field']时会收到ArrowNotImplemented错误,因为它不支持StructType

我最近的一次尝试是使用分组的UDF,如下所示

df = df.withColumn("average_field", expr("aggregate(bag['bag_field'], (cast( '0' as double) as sum, cast( '0' as double) as n), (acc, x) -> (acc.sum + x, acc.n + 1), acc -> acc.sum / acc.n * 1.0)"))
import pandas as pd
from pyspark.sql.functions import pandas_udf, PandasUDFType

def pavg(v):
    return v.mean() 

udf_avg = pandas_udf(pavg, functionType=PandasUDFType.GROUPED_AGG, returnType=DoubleType())

my_original_fields = df.columns
df = df.groupBy(my_original_fields).agg(udf_avg(df.bag['bag_field'])).alias("average_field")
df.show()

此实现出现以下错误:ArrowInvalid:无法将[1.99 1.99 1.99 1.99 1.99 1.99 1.99]转换为numpy类型。ndarray:尝试转换为double。

能否放置数据帧的完整示例版本?无法使用您提供的单行程序重新生成数据框。您能提供完整的数据框示例版本吗?无法使用您提供的单行程序重新生成它。