python - 更改rdd中的数据类型

标签 python apache-spark pyspark

我有一个 rdd

rdd=sc.parallelize([[True,False,False], [True,True,True], [False,False,True]])

我想将行更改为整数。如果每行只有三个元素,我可以使用

def asInt(x):
    return [int(x[0]), int(x[1]), int(x[2])]


rdd=rdd.map(asInt)

这给了我

[[1, 0, 0], [1, 1, 1], [0, 0, 1]]

但是我有数百万行,所以我需要一个不同的解决方案。我也会接受任何使用 DataFrame 的解决方案。

最佳答案

除了手动枚举之外,您的方法看起来没有任何特别错误。您可以将其替换为简单的列表理解:

rdd.map(lambda xs: [int(x) for x in xs])

您也可以使用数组代替列表:

import array

rdd.map(lambda xs: array.array('B', xs))

关于DataFrames:

from pyspark.sql.functions import col

df = rdd.toDF()
df.select(*[col(c).cast("integer") for c in df.columns])

关于python - 更改rdd中的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36228747/

相关文章:

unit-testing - Spark 单元测试不适用于 powermockito

java - 将 Spark 作业写入 NFSv3 安装卷的变音问题

java - 实现一个 java UDF 并从 pyspark 调用它

python - 如何将大型 python 模型应用于 pyspark-dataframe?

python - 将列中的 String 转换为 ArrayType 并分解

Python 不一致的日期时间解析

java - 在 EMR 上提交 JAR 时出现 ClassNotFoundException

python - 在 2D NumPy 数组中将每列岛屿缩放到它们的长度

Python 格式的表格输出

python - 带有特定 python 库的 spark-submit