Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
Python 从PySpark返回复杂类型_Python_Apache Spark_Pyspark_User Defined Functions_Databricks - Fatal编程技术网

Python 从PySpark返回复杂类型

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:

我试图从一个分组映射UDF返回一个值矩阵

在定义模式时,我给出了Array(Array(DoubleType()),但这会导致只返回矩阵的第一行,而所有其他值都为None

以下是我尝试过的:

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支持。谢谢