使用Apache-Spark-SQL访问数据库



嗨,我是使用Java的Apache Spark的新学习者这是正确的方法?此代码正常工作,但性能非常慢,我不知道哪种是访问每个循环数据的最佳方法。

Dataset<Row> javaRDD = sparkSession.read().jdbc(dataBase_url, "sample", properties);
javaRDD.toDF().registerTempTable("sample"); 
Dataset<Row> Users = sparkSession.sql("SELECT DISTINCT FROM_USER FROM sample ");
List<Row> members = Users.collectAsList();
for (Row row : members) {
 Dataset<Row> userConversation = sparkSession.sql("SELECT DESCRIPTION FROM sample WHERE FROM_USER ='"+ row.getDecimal(0) +"'");
 userConversation.show();
}

尝试使用所有用户创建一个集合,然后执行

之类的查询
sparkSession.sql("SELECT DESCRIPTION FROM sample WHERE FROM_USER IN usersSet);

这样,您仅执行一个查询,因此您仅支付DB连接所需的开销。

如果您通过HDFS运行Spark,这是一种一次查询,就是使用SQOOP这样的工具将SQL表加载在Hadoop中,并在Spark中本地使用数据。

相关内容

  • 没有找到相关文章