2016-03-25 12 views
0

にデータ型を変更します。私は、各行の三つの要素を持っていた場合、私は私には私が整数に行を変更したいRDD</p> <pre><code>rdd=sc.parallelize([[True,False,False], [True,True,True], [False,False,True]]) </code></pre> <p>を持っRDD

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

を与える

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


rdd=rdd.map(asInt) 

を使用することができますが、私は数百万行を持っているので、私は別のソリューションを必要としています。私はまた、DataFrameを使用する任意のソリューションを受け入れるだろう。ここ

答えて

3

は手動列挙以外のあなたのアプローチで特に何か問題があるようにそれは見えないです。あなたは、単純なリスト内包でそれを置き換えることができます:

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

をまたリストの代わりにarrayを使用することができます。

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

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 } } 
関連する問題