我有一个 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/