Python 从PySpark返回复杂类型
我试图从一个分组映射UDF返回一个值矩阵 在定义模式时,我给出了Array(Array(DoubleType()),但这会导致只返回矩阵的第一行,而所有其他值都为None 以下是我尝试过的:Python 从PySpark返回复杂类型,python,apache-spark,pyspark,user-defined-functions,databricks,Python,Apache Spark,Pyspark,User Defined Functions,Databricks,我试图从一个分组映射UDF返回一个值矩阵 在定义模式时,我给出了Array(Array(DoubleType()),但这会导致只返回矩阵的第一行,而所有其他值都为None 以下是我尝试过的: myschema = StructType([ StructField('my_id', StringType()), StructField('matrix', ArrayType(ArrayType(DoubleType())) ) ]); cols = list(map(lambda s:
myschema = StructType([
StructField('my_id', StringType()),
StructField('matrix', ArrayType(ArrayType(DoubleType())) )
]);
cols = list(map(lambda s: s.__dict__['name'], myschema))
@F.pandas_udf(myschema, F.PandasUDFType.GROUPED_MAP)
def my_function(data):
myID = 'Hello'
matrix = [
[1.1, 2.2, 3.3],
[4.4, 5.5, 6.6],
[7.7, 8.8, 9.9]
]
return pd.DataFrame([[ myID, matrix ]], columns=cols)
df = spark.createDataFrame(pd.DataFrame(['id1', 'id2'], columns=['ID']))
df.groupBy('ID').apply(my_function).collect()
因此,我:
行(my_id=u'Hello',矩阵=[[1.1,2.2,3.3],无,无])
当然,返回非嵌套数组不会有任何问题
myschema = StructType([
StructField('my_id', StringType()),
StructField('matrix', ArrayType(DoubleType()))
]);
cols = list(map(lambda s: s.__dict__['name'], myschema))
@F.pandas_udf(myschema, F.PandasUDFType.GROUPED_MAP)
def my_function(data):
myID = 'Hello'
matrix = [1.1, 2.2, 3.3]
return pd.DataFrame([[ myID, matrix ]], columns=cols)
df = spark.createDataFrame(pd.DataFrame(['id1', 'id2'], columns=['ID']))
df.groupBy('ID').apply(my_function).collect()
结果是:
行(my_id=u'Hello',矩阵=[1.1,2.2,3.3])
架构有问题吗?在Spark 2.4.0/pyarrow 0.11.0中运行良好。我刚刚检查了Spark版本。我发现:Databricks Runtime Version 5.2(包括Apache Spark 2.4.0、Scala 2.11)在这种情况下,对Databricks支持来说可能更像是一个问题——如果它与开放发行版一起工作,那么肯定是他们内部搞糟了,你不太可能在这里得到帮助。我将问题重定向到Databricks支持。ThanksWorks在Spark 2.4.0/pyarrow 0.11.0中表现良好。我刚刚检查了我的Spark版本。我发现:Databricks Runtime Version 5.2(包括Apache Spark 2.4.0、Scala 2.11)在这种情况下,对Databricks支持来说可能更像是一个问题——如果它与开放发行版一起工作,那么肯定是他们内部搞糟了,你不太可能在这里得到帮助。我将问题重定向到Databricks支持。谢谢