2016-10-16 5 views

答えて

5

可能です。

RDDには、saveAsObjectFilesaveAsTextFileの機能があります。タプルはとして保存されるので、後で解析することができます。

読書だから()

を排除するためにtextFile SparkContextから機能し、その後.mapで行うことができます。 バージョン1:

rdd.saveAsTextFile ("hdfs:///test1/"); 
// later, in other program 
val newRdds = sparkContext.textFile("hdfs:///test1/part-*").map (x => { 
    // here remove() and parse long/strings 
}) 

バージョン2:

rdd.saveAsObjectFile ("hdfs:///test1/"); 
// later, in other program - watch, you have tuples out of the box :) 
val newRdds = sparkContext.sc.sequenceFile("hdfs:///test1/part-*", classOf[Long], classOf[String]) 
+0

誓い、それはニート溶液である:)。しかし、saveAsTextは多くの異なるファイルを作成するため、textFileを使ってどのように読み込みますか? – pythonic

+0

@pythonic私の更新を参照してください - あなたはファイルの範囲を読むことができます。 RDDの各部分はファイル 'part-XYZŻ'に保存されるので、そのような名前の各ファイルを読むことができます –

3

私が推薦しますRDDが表形式の場合は、DataFrameを使用してください。データフレームはテーブル、または2次元配列のような構造です。各列には1つの変数の測定値が含まれ、各行には1つのケースが含まれます。 DataFrameには、表形式のために追加のメタデータがあります。これにより、Sparkはファイナライズされたクエリに対して特定の最適化を実行できます。 RDDは、最適化できないデータのブラックボックスまたはコアの抽象化のほうが多い復元力のある分散データセットです。 しかし、DataFrameからRDDへ、またはその逆に行くことができます。また、RDDからDataFrameへ(RDDが表形式である場合)toDFメソッドを使用することができます。

以下がHDFSにCSVと寄せ木形式/ストアデータフレームを作成する例であり、

val conf = { 
    new SparkConf() 
    .setAppName("Spark-HDFS-Read-Write") 
} 

val sqlContext = new SQLContext(sc) 

val sc = new SparkContext(conf) 

val hdfs = "hdfs:///" 
val df = Seq((1, "Name1")).toDF("id", "name") 

// Writing file in CSV format 
df.write.format("com.databricks.spark.csv").mode("overwrite").save(hdfs + "user/hdfs/employee/details.csv") 

// Writing file in PARQUET format 
df.write.format("parquet").mode("overwrite").save(hdfs + "user/hdfs/employee/details") 

// Reading CSV files from HDFS 
val dfIncsv = sqlContext.read.format("com.databricks.spark.csv").option("inferSchema", "true").load(hdfs + "user/hdfs/employee/details.csv") 

// Reading PQRQUET files from HDFS 
val dfInParquet = sqlContext.read.parquet(hdfs + "user/hdfs/employee/details") 
関連する問題