4
上記のコードをスパークドライバとして使用しています。プログラムを実行すると、パーキングファイルとして必要なデータを適切に保存します。Spark Java Map関数が2回実行されています
String indexFile = "index.txt";
JavaRDD<String> indexData = sc.textFile(indexFile).cache();
JavaRDD<String> jsonStringRDD = indexData.map(new Function<String, String>() {
@Override
public String call(String patientId) throws Exception {
return "json array as string"
}
});
//1. Read json string array into a Dataframe (execution 1)
DataFrame dataSchemaDF = sqlContext.read().json(jsonStringRDD);
//2. Save dataframe as parquet file (execution 2)
dataSchemaDF.write().parquet("md.parquet");
しかし、私はRDD indexData
に私のマッパー機能を観察したが2回実行取得されます。私はSQLContext
セカンドを使用してDataFrame
としてjsonStringRdd
を読んだとき、私はdataSchemaDF
寄木細工のファイルに書き込みをする際 まず、あなたはこの繰り返し実行を避けるために、どのように、この上で私を導くことはできますか? jsonの文字列をDataframeに変換する他の方法がありますか?
どこに2つのマップがありますか? RDDは遅れて評価されます。 'map'操作は変換であり、アクションではないので、' jsonStringRDD'の割り当ては直ちに実行されるべきではありません。おそらく、Dataframeを読み込んで寄木細工に書き込むための実行パスは両方とも、RDDの収集を必要とします。 –
私はマッパー関数内にロギングステートメントを持っていますが、ログに2回表示されます。 – blob