pyspark 在rdd中更改数据类型

qhhrdooz  于 2023-05-21  发布在  Spark
关注(0)|答案(2)|浏览(153)

我有一个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的解决方案。

1tu0hz3e

1tu0hz3e1#

除了手动枚举之外,您的方法似乎没有什么特别的错误。你可以用一个简单的列表解析来代替它:

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

你也可以使用array来代替list:

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])
h43kikqp

h43kikqp2#

这是Scala的答案

val rdd = sparkContext.parallelize( Array( Array( true, false, true ), Array( true, false, false ), Array( false, false, true ) ) )
val res = rdd.map { item => item.map { x => if ( x ) 1 else 0 } }

相关问题