私は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
あなたはスパーク2を試しませんでした、私は推測していますか? –
@ cricket_007スパーク2はどのように変化しますか? –
SparkSQLコードの大幅な改善。ちょっと興味があるんだけど –