2017-08-26 8 views
0

私はJDBC ResultSetをSpark RDDに変換しようとしていて、Sparkの並列処理機能を使用して効率的な方法を探していました。JDBC ResultSetをSpark RDD/DataFrameに変換する

以下

iは

https://stackoverflow.com/a/32073423/6064131このあたりとして
val rs:ResultSet = stmt .getResultSet 
val colCount = rs.getMetaData.getColumnCount 

def getRowFromResultSet(resultSet: ResultSet): String ={ 
    var i:Int = 1 
    var rowStr="" 
    while(i<=colCount){ 
    rowStr=rowStr+resultSet.getString(i)+delim 
    i+=1 
    } 
    rowStr 
} 

val resultSetList = Iterator.continually((rs.next(), rs)).takeWhile(_._1).map(r => { 
    getRowFromResultSet(r._2) // (ResultSet) => (spark.sql.Row) 
}).toList 

val x = sc.parallelize(resultSetList) 

を実装したものです今主な問題、それはより多くの時間を取っていると私は、すべてのデータセットは、1つの針eye.Butを通して引っ張られ理解されてはに任意のより良い方法はありこれを達成するには?

これを実現するためにinbuilt機能sqlContext.read.formatを使用していない理由があるかもしれません。なぜなら、Sparkは複雑なクエリで問題を作成しているクエリの周りに「SELECT * FROM()」をラップするからです。 は詳細Issue with WITH clause with Cloudera JDBC Driver for Impala - Returning column name instead of actual Data

+0

あなたはスパーク2を試しませんでした、私は推測していますか? –

+0

@ cricket_007スパーク2はどのように変化しますか? –

+0

SparkSQLコードの大幅な改善。ちょっと興味があるんだけど –

答えて

0

のリンクを参照してくださいしかし、これを達成するための任意のより良い方法はありますか?

私は車輪を再発明しません。最新のSparkバージョン(1.6はかなり古くて)とJDBCドライバ(私の推測では、それは責任を負う)と同じ問題がまだ発生した場合は、CREATE VIEWとしてクエリに使用してください。

また、バグレポートを提出することを忘れないでください。

関連する問題