Ich bin mit Funken 2.11 Version und ich tue nur drei grundlegende Operationen in meiner Anwendung:Leistungsproblem bei den Funken java
- nehmen Datensätze aus Datenbank: 2,2 Millionen
- Überprüfung Datensätze aus einer Datei (5 000 Verwendung) in Datenbank (2.200.000) enthält
- Schreiben in eine Datei im cSV-Format Datensätze angepasst
Aber für diese drei Operationen dauert es fast 20 Minuten. Wenn ich dieselben Operationen in SQL mache, dauert es weniger als 1 Minuten.
Ich habe begonnen, Funken zu verwenden, weil es Ergebnisse sehr schnell ergibt, aber es dauert zu viel Zeit. Wie kann ich die Leistung verbessern?
Schritt 1: Datensätze aus der Datenbank aufnehmen.
Properties connectionProperties = new Properties();
connectionProperties.put("user", "test");
connectionProperties.put("password", "test##");
String query="(SELECT * from items)
dataFileContent= spark.read().jdbc("jdbc:oracle:thin:@//172.20.0.11/devad", query,connectionProperties);
Schritt 2: Aufzeichnungen der Datei A (5k), die in Datei B (2M) Prüfen, unter Verwendung enthält
Dataset<Row> NewSet=source.join(target,target.col("ItemIDTarget").contains(source.col("ItemIDSource")),"inner");
Schritt 3: Schreiben angepassten Aufzeichnungen in einer Datei des CSV-Format
NewSet.repartition(1).select("*")
.write().format("com.databricks.spark.csv")
.option("delimiter", ",")
.option("header", "true")
.option("treatEmptyValuesAsNulls", "true")
.option("nullValue", "")
.save(fileAbsolutePath);
Um die Leistung zu verbessern, habe ich verschiedene Einstellungen wie Cache, Daten Serialisierung
012 versuchtShuffle Zeit
sqlContext.setConf("spark.sql.shuffle.partitions", "10"),
Tuning Datenstruktur
-XX:+UseCompressedOops ,
keiner der Ansatz ergibt eine bessere Leistung nicht.
Gibt es einen Grund, Funken für diesen Anwendungsfall zu verwenden? Es scheint mir, dass das Schreiben der 5k-Datensätze in die Datenbank und das Ausgeben eines SQL-Joins innerhalb der Datenbank der effizienteste Ansatz wäre. – maasg
Ich meine, wie lange dauert es, diese Abfrage in Spark materialisieren: 'SELECT * von Elementen)'? – maasg