2016-11-20 22 views
1

DataFrameをCSV形式またはパーケット形式(単一のファイル)で保存してから再度開く必要があります。データの量は60Mbを超えないので、単一のファイルは合理的な解決策です。SparkからDataFrameを読み書きする方法

それが存在する場合は、ファイルを読むには:

df = sqlContext 
       .read.parquet("s3n://bucket/myTest.parquet") 
       .toDF("key", "value", "date", "qty") 

をファイルに書き込むには:この単純なタスクでは、これは私が試したものです...私に頭痛の多くを提供し

df.write.parquet("s3n://bucket/myTest.parquet") 

この

1)writeは後で私が.read.parquet("s3n://bucket/myTest.parquet")で読み取ることができませんhadoopishファイルとフォルダmyTest.parquetを作成しますので、動作しません。実際には、後でDataFrameに読み込むことができない限り、複数のハイオフッシュファイルは気にしません。出来ますか?

2)私は常に同じファイルmyTest.parquetで作業しており、S3で更新して上書きしています。それは、ファイルがすでに存在するため保存できないことを伝えます。

誰かが私に読み書きループを行う正しい方法を教えてくれますか?ファイル形式は私にとって重要ではありません(csv、parquet、csv、hadoopishファイル)unleass私は読み書きループを作ることができます。

+0

あなたは[スパークCSV](HTTPSを見たことがあります。 com/databricks/spark-csv)パッケージ? – hoyland

答えて

1

saveAsTable("TableName")を使用してDataFrameを保存し、table("TableName")と読むことができます。場所はspark.sql.warehouse.dirで設定できます。また、ファイルをmode(SaveMode.Ignore)で上書きすることもできます。あなたは公式のドキュメントより多くここにreadすることができます。 Javaでは

が、それは次のようになります。

SparkSession spark = ... 
spark.conf().set("spark.sql.warehouse.dir", "hdfs://localhost:9000/tables"); 
Dataset<Row> data = ... 
data.write().mode(SaveMode.Overwrite).saveAsTable("TableName"); 

今、あなたが使用したデータから読み取ることができます:// githubの:

spark.read().table("TableName"); 
+1

例を挙げてもらえますか? – duckertito

+0

私の答えを編集しました。私の例はJavaで書かれていますが、私はScalaではあまりよくありません。 Spark 2.x.xを使用していますか?私が知る限り、SparkSessionはありませんが、あなたはSparkContextでそれを行うことができます。 –

+0

私はSpark 1.6.2を使用します。これは、Spark 2.0.0が現時点では推奨されていないためです。 – duckertito

関連する問題