python - 无法将 int + array(int) 列表转换为 pyspark 数据帧
问题描述
我正在尝试将一个 intID
和一个 3 个 int 的数组转换为一个具有 2 列的数据帧,然后与 pyspark 中的另一个数据帧联合;
但是,我只是在与架构相关的错误之后遇到错误,并且似乎没有任何效果。我不确定这是为什么。
emp_rdd = spark.sparkContext.emptyRDD()
schema = StructType([
StructField("id", IntegerType(), True),
StructField("data", ArrayType(IntegerType()), True),])
df = spark.createDataFrame(data=emp_rdd, schema=schema)
columns = ['id','data']
for i in range(10):
data = [id, data1]
newRows = spark.createDataFrame(data,columns)
df= df.union(newRows)
这给了我这个错误;
无法推断类型的架构:<class 'int'>
任何帮助,将不胜感激
解决方案
您收到此错误的原因是,在您的 for 循环中,您将参数data
作为简单列表传递,而spark.createDataFrame
期望列表或元组的可迭代。
尝试将其更改为:
data = [(id, data1)]
例子:
for i in range(5):
data = [(i, [i + 1, i + 2, i + 3])]
newRows = spark.createDataFrame(data, columns)
df = df.union(newRows)
df.show()
#+---+---------+
#| id| data|
#+---+---------+
#| 0|[1, 2, 3]|
#| 1|[2, 3, 4]|
#| 2|[3, 4, 5]|
#| 3|[4, 5, 6]|
#| 4|[5, 6, 7]|
#+---+---------+
推荐阅读
- mongodb - MongoDB Shell - 将新字段添加到现有字段中的所有文档
- c# - 等待来自 SendGrid 的 API 返回代码时应用程序冻结
- assembly - NASM 调用函数后我应该弹出函数参数吗?
- c++ - 如何制作带有矢量的地图?
- android - 是否可以从多个设备上的终端一个接一个地运行 android espresso ui 测试?
- r - model.frame.default 中的错误(术语,newdata,na.action = na.action,xlev = object$xlevels):可变长度不同(为“因子(DAF)”找到)
- node.js - 如何将json对象值作为查询字符串传递给swagger UI中的url
- firebase - 实时数据库中的 Firebase 集数据正在超时 golang
- python - Python在没有for循环的情况下处理列表中的每个dict
- ietf-netmod-yang - yang 模型中的实例标识符如何?