使用 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 访问数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何使用SQLSERVER链接服务器访问数据库

数据访问,使用mysql类访问数据

C++中ADO访问数据库方法?

Oracle数据访问和索引的使用

通过JDBC访问数据库

我啥时候需要使用存储在数据库中的访问令牌?