堆栈上还有其他类似的示例,但是都没有涵盖复杂的(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中运行该数据帧,但是很遗憾,我在模式声明失败后尝试编辑类型的尝试。