有没有办法在python中更改现有spark数据框的架构类型?

时间:2019-05-06 05:52:23

标签: python apache-spark pyspark apache-spark-sql pyspark-sql

堆栈上还有其他类似的示例,但是都没有涵盖复杂的(arrayType)数据类型。

我有一个如下所示的spark数据框:

https://www.dropbox.com/s/qpdokird4rqe5ci/Screen%20Shot%202019-05-06%20at%201.34.29%20pm.jpeg

具有以下架构:

root
 |-- sequence: struct (nullable = true)
 |    |-- sequence: array (nullable = true)
 |    |    |-- element: long (containsNull = true)

我想对其进行转换,以使其具有以下特定的架构类型,以便与算法“前缀跨度”一起使用。

root
 |-- sequence: array (nullable = true)
 |    |-- element: array (containsNull = true)
 |    |    |-- element: long (containsNull = true)

我尝试将其转换为列表列表的python列表,然后将其移回spark数据帧,这实际上解决了问题,但是不幸的是,我需要仅使用spark数据帧和rdds解决此问题。

我已经尝试过了:

from pyspark.sql.types import ArrayType

changedTypedf = df.withColumn("sequence",df["sequence"].cast(ArrayType()))

但是出现以下错误:

TypeError: __init__() missing 1 required positional argument: 'elementType'

我希望获得一个输出,在该输出中可以使用此新模式重新创建数据框,然后可以在prefixspan中运行该数据帧,但是很遗憾,我在模式声明失败后尝试编辑类型的尝试。

0 个答案:

没有答案