Ich verwende den JDBC-Treiber von Simba Technologies Inc, um mit dem Google Cloud-Schlüssel zu verbinden. Es läuft wie erwartet mit Java.sql. Als ich versuchte, den Simba-JDBC-Treiber mit dem JDBC-Lesegerät von Spark zu verwenden, um die Abfrageausgabe als DataFrame zu lesen, gab es jedoch eine falsche Ausgabe.Simba JDBC-Treiber Für Cloud Spanner mit Spark verwendet JDBC DataFrame-Reader
Hier ist meine Schlüssel Tabelle:
UserID UserName
1 Vaijnath
2 Ganesh
3 Rahul
Metadata: UserID (String)
Username (String)
I Abfrage als ich ausführen: SELECT * FROM users
Diese Abfrage holt korrekte Daten, wenn ich Verwenden Sie den Simba JDBC-Treiber mit Java Sql, aber er kann keine Daten abrufen, wenn ich ihn mit dem JDBC-Reader von Spark SQL verwende.
Es gibt den Datenrahmen als
+------+--------+
|UserID|UserName|
+------+--------+
|UserID|UserName|
|UserID|UserName|
|UserID|UserName|
+------+--------+
Wie wir sehen können, ist es richtig Metadaten und Anzahl der Zeilen zurückgibt, aber Zeile enthält die Spaltennamen.
Hier ist der Code Ich verwende:
import java.util.Properties
import org.apache.spark.sql.{DataFrame, SparkSession}
object spannerIn {
val sparkSession =SparkSession
.builder()
.appName("Spark SQL basic example").master("local")
.config("spark.sql.warehouse.dir", "file:///tmp")
.config("spark.sql.shuffle.partitions", 1)
.getOrCreate()
val properties =new Properties()
properties.setProperty("user", "")
properties.setProperty("password", "")
properties.setProperty("driver", "com.simba.cloudspanner.core.jdbc42.CloudSpanner42Driver")
val connectionURL="jdbc:cloudspanner://localhost;Project=abc;Instance=pqr;Database=xyz;PvtKeyPath=FilePath"
val selectQuery="(select * from users)"
def main(args: Array[String]): Unit = {
val df = createJdbcDataframe()
df.show()
}
def createJdbcDataframe(): DataFrame = {
sparkSession.read.jdbc(connectionURL, selectQuery, properties)
}
}
Meine Frage ist, kann ich die Simba-JDBC-Treiber mit Funken verwenden? Wenn ja, welche zusätzlichen Dinge muss ich hinzufügen. Jede Hilfe geschätzt.