使用 Apache-Spark-SQL 访问数据库
Posted
技术标签:
【中文标题】使用 Apache-Spark-SQL 访问数据库【英文标题】:Access dataBase using Apache-Spark-SQL 【发布时间】:2017-09-12 06:48:17 【问题描述】:您好,我是使用 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();
【问题讨论】:
您正在为循环的每次迭代执行查询。这总是很慢。 thnx,还有其他方法可以使用 spark 代码访问它吗? 当然。如果做事的唯一方法是缓慢而糟糕的方法,那将不是很有用。 【参考方案1】:尝试创建一个包含所有用户的集合,然后执行类似的查询
sparkSession.sql("SELECT DESCRIPTION FROM sample WHERE FROM_USER IN usersSet);
这样您只执行一个查询,因此您只需支付一次数据库连接所需的开销。
如果您在 HDFS 上运行 Spark 并且这是一次性查询,另一种方法是使用像 Sqoop 这样的工具在 Hadoop 中加载 SQL 表并在 Spark 中本地使用数据。
【讨论】:
以上是关于使用 Apache-Spark-SQL 访问数据库的主要内容,如果未能解决你的问题,请参考以下文章