Ich habe versucht, JDBC ResultSet zu Spark RDD zu konvertieren und suchte nach einer effizienten Möglichkeit, dies mit der Parallelitätsfunktion von Spark zu tun.Konvertieren von JDBC ResultSet zu Spark RDD/DataFrame
Im Folgenden finden Sie, was ich als umgesetzt haben je diese 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)
Nun ist die wichtigste Frage ist es mehr Zeit nehmen, und ich verstehe alle Datensatzes durch eine Nadel eye.But gezogen wird, ist es eine bessere Art und Weise zu Dies erreichen?
Einige wundern sich, warum ich nicht eingebauten Feature sqlContext.read.format verwenden, um dies zu erreichen, ist der Grund, Spark umschließt eine "SELECT * FROM()" um die Abfrage, die Problem mit komplexen Abfragen erstellt. Bitte beachten Sie den Link für Details Issue with WITH clause with Cloudera JDBC Driver for Impala - Returning column name instead of actual Data
Sie haben Spark 2 nicht versucht, schätze ich? –
@ cricket_007 Wie Spark 2 wird einen Unterschied machen? –
Signifikante Verbesserung des SparkSQL-Codes. Nur neugierig –