2017-09-11 3 views
0

J'utilise Spark DataFrameReader pour effectuer une requête sql depuis la base de données. Pour chaque requête effectuée, la session Spark est requise. Ce que je voudrais faire est: pour chacun des JavaPairRDDs exécuter map, qui invoquerait sql query avec les paramètres de ce RDD. Cela signifie que je dois passer SparkSession dans chaque lambda, ce qui semble être un mauvais design. Quelle est l'approche commune dans de tels problèmes?Apache Spark distributed sql

Il pourrait ressembler à:

roots.map(r -> DBLoader.getData(sparkSession, r._1)); 

Comment je charge les données maintenant:

JavaRDD<Row> javaRDD = sparkSession.read().format("jdbc") 
      .options(options) 
      .load() 
      .javaRDD(); 
+0

roots.map (r -> DBLoader.getData (sparkSession, r._1)); n'est pas la bonne approche. en général, vous n'aurez pas besoin de passer la session en lambda. – BDR

Répondre

0

Le but de Big Data est d'avoir la localité de données et être en mesure d'exécuter votre code où se trouve votre données , il est correct de faire un gros chargement d'une table dans la mémoire ou sur le disque local (cache/persist), mais les requêtes continues jdbc distantes iront à l'encontre du but.