假设我有示例数据:
sdata = [(1,(10,20,30)),
(2,(100,20)),
(3,(100,200,300))]
columns = [('Sn','Products')]
df1 = spark.createDataFrame(([x[0],*x[1]] for x in sdata), schema=columns)
获取错误:
属性错误:'tuple'对象没有属性'encode'
如何加载此变长数据?
假设我有示例数据:
sdata = [(1,(10,20,30)),
(2,(100,20)),
(3,(100,200,300))]
columns = [('Sn','Products')]
df1 = spark.createDataFrame(([x[0],*x[1]] for x in sdata), schema=columns)
获取错误:
属性错误:'tuple'对象没有属性'encode'
如何加载此变长数据?
2条答案
按热度按时间vc6uscn91#
可以将元组表示为StructType;但是它有固定的字段,我不确定“可变长度”的元组;但是如果您要求在集合类型中支持可变数量的元素,那么您可以定义一个显式模式:
或者直接将字段用作数组:
siv3szwd2#
要将可变长度的数据加载到PySpark DataFrame中,可以使用pyspark.sql.types模块中的ArrayType()函数来定义DataFrame的架构。ArrayType()函数允许您指定数组中元素的数据类型,它可用于定义DataFrame中包含可变数量元素的列。
以下是如何使用ArrayType()函数定义包含可变长度数据之DataFrame结构描述的范例: