2016-12-02 4 views
1

私は200万レコードのデータセットを持っています。私はそれを2つの等しい半分に分割したい。私はシリアルナンバーの列がないので、どこに条件を適用して2に分割することができます。それは適切なアプローチではないかもしれませんが、私がやりたいことはデータフレームを半分に分割することです。spalaを使ってデータフレームを2つ以上のデータフレームに分割する

私が使用しています

サンプルコード:

var invoiceData = sc.textFile("/Scala/InvoiceLine.csv"); 
def removeheader (x : RDD[String]): RDD[String] = { 
    x.mapPartitionsWithIndex((idx, lines) => { 
    if (idx == 0) { 
     lines.drop(1) 
    } 
    lines 
    }) 
} 
var invoiceWithoutHeader = removeheader(invoiceData); 
var invoiceSchemaString = invoiceData.first().toUpperCase().split(",").map(_.trim()); 
var invoiceSchema = StructType(invoiceSchemaString.map(fieldName => StructField(fieldName, StringType, true))) 
var invoiceRowRDD = invoiceWithoutHeader.map(y => { 
    var parser = new CSVParser(','); 
    parser.parseLine(y) 
}).map { x => Row.fromSeq(x) } 
var invoiceDF = sqlContext.applySchema(invoiceRowRDD, invoiceSchema); 

を今、私は2つの部分にinvoiceDFを分割したい、百万各 私は初心者ですと、コードは、恐れ入りますが、効率的ではないかもしれません。事前に

感謝:)

答えて

3

データをランダム化しても問題ない場合は、あなただけrandomSplit()を使用することができます。

val Array(half1, half2) = invoiceDF.randomSplit(Array(0.5, 0.5)) 
+0

おかげでたくさん。ランダム化は問題ではない。 – Dileep

+3

ランダム化せずに分割する方法はありますか?私はいくつかの条件、例えば、列の値> = 0.5に基づいて分割したい –

関連する問題