gpt4 book ai didi

python - 在 pyspark 中使用 arraytype 列创建数据框

转载 作者:行者123 更新时间:2023-12-04 14:11:18 25 4
gpt4 key购买 nike

我正在尝试使用 ArrayType() 列创建一个新的数据框,我尝试过定义模式和不定义模式,但无法获得所需的结果。我的代码在下面,带有架构

from pyspark.sql.types import *
l = [[1,2,3],[3,2,4],[6,8,9]]
schema = StructType([
StructField("data", ArrayType(IntegerType()), True)
])
df = spark.createDataFrame(l,schema)
df.show(truncate = False)

这给出了错误:

ValueError: Length of object (3) does not match with length of fields(1)

期望的输出:

+---------+
|data |
+---------+
|[1,2,3] |
|[3,2,4] |
|[6,8,9] |
+---------+

编辑:

我发现了一件奇怪的事情(至少对我来说是这样):

如果我们使用下面的代码,它会给出预期的结果:

import pyspark.sql.functions as f
data = [
('person', ['john', 'sam', 'jane']),
('pet', ['whiskers', 'rover', 'fido'])
]

df = spark.createDataFrame(data, ["type", "names"])
df.show(truncate=False)

这给出了以下预期输出:

+------+-----------------------+
|type |names |
+------+-----------------------+
|person|[john, sam, jane] |
|pet |[whiskers, rover, fido]|
+------+-----------------------+

但如果我们删除第一列,则会产生意想不到的结果。

import pyspark.sql.functions as f
data = [
(['john', 'sam', 'jane']),
(['whiskers', 'rover', 'fido'])
]

df = spark.createDataFrame(data, ["names"])
df.show(truncate=False)

这给出了以下输出:

+--------+-----+----+
|names |_2 |_3 |
+--------+-----+----+
|john |sam |jane|
|whiskers|rover|fido|
+--------+-----+----+

最佳答案

我想您已经有了问题的答案。另一种解决方案是:

>>> l = [([1,2,3],), ([3,2,4],),([6,8,9],)]
>>> df = spark.createDataFrame(l, ['data'])
>>> df.show()

+---------+
| data|
+---------+
|[1, 2, 3]|
|[3, 2, 4]|
|[6, 8, 9]|
+---------+

>>> from pyspark.sql.functions import array

>>> l = [[1,2,3],[3,2,4],[6,8,9]]
>>> df = spark.createDataFrame(l)
>>> df = df.withColumn('data',array(df.columns))
>>> df = df.select('data')
>>> df.show()
+---------+
| data|
+---------+
|[1, 2, 3]|
|[3, 2, 4]|
|[6, 8, 9]|
+---------+

关于奇怪的事情,它并不奇怪,但你需要记住,具有单个值的元组本身就是单个值

>>> (['john', 'sam', 'jane'])
['john', 'sam', 'jane']

>>> type((['john', 'sam', 'jane']))
<class 'list'>

所以 createDataFrame 看到的是列表而不是元组。

关于python - 在 pyspark 中使用 arraytype 列创建数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64041530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com