2016-05-25 14 views
0

私はSpark SQL DataFramesをDropwizard Webアプリケーションを介して外部からアクセス可能にしようとしているパーケットファイルとして保存するJava Spark Streamingアプリケーション(v1.6.1)を公開しています。 2つの質問:Dropwizardを介してSpark SQLデータフレームにアクセスしますか?

1)フォームで出力を取得するには、Dropwizardが使用できます。 df.save(path)は文字列パス名のみを受け入れ、df.show()はSystem.outに書き込みます。どちらも風味がありません。私はスパークSQLのJsonサポートを直接使用したいが、それを得るためにファイルを読みたくない。 Dropwizardが戻り値の型として使用できるものを構築するには、df.javaRDD.foreachPartition()に戻す必要がありますか?

2)各Dropwizardリソース(エンドポイント)は独自のSparkContextを構築する必要がありますか、それとも上位レベルでこれらを構築して各エンドポイントで再利用することはできますか?

答えて

0

私は自分自身を試してみません。

JVMごとに1つのSparkContextしか存在できないため、すべてのエンドポイントでJavaSparkContextを共有する必要があります。だから私はコンストラクタ経由で1を渡します。それは私が現在持っている以上の負荷の下でsyncrhonisationの危険をもたらすかどうかはまだ私には明らかです。

JavaRDD<Row> rowRDD = df.javaRDD() 
     .mapPartitions(new FlatMapFunction<Iterator<Row>, Row>() 
     { 
      @Override 
      public List<Row> call(Iterator<Row> itr) 
        throws Exception 
      { 
       List<Row> rowList = new LinkedList<Row>(); 
       while (itr.hasNext()) 
       { 
        Row row = itr.next(); 
        rowList.add(row); 
       } 
       return rowList; 
      } 
     }); 
final List<Row> rowList = rowRDD.collect(); 
final StructType types = df.schema(); 
final String[] names = types.fieldNames(); 
rowList.add(RowFactory.create(names)); 
Response r = Response 
     .status(200) 
     .entity(rowList) 
     .build(); 
return r; 

これは私が最初の質問の日付に管理してきた最高です

関連する問題