嗨,我是使用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中本地使用数据。