将 Java Spark Sql 连接到 Mysql
Posted
技术标签:
【中文标题】将 Java Spark Sql 连接到 Mysql【英文标题】:connect Java Spark Sql to Mysql 【发布时间】:2021-01-09 20:22:23 【问题描述】:我正面临这个我无法解决的问题。我正在编写一个带有 mysql 集成的 javaspark 代码。我可以看到对此有一个小修复。
package JavaSpark.Javs.SQL;
import java.util.Properties;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
public class sparkSqlMysql
private static final org.apache.log4j.Logger LOGGER = org.apache.log4j.Logger.getLogger(sparkSqlMysql.class);
private static final String MYSQL_CONNECTION_URL = "jdbc:mysql://localhost:3306/BCG";
private static final String MYSQL_USERNAME = "root";
private static final String MYSQL_PWD = "mypassword";
private static final SparkSession sparkSession =
SparkSession.builder().master("local[*]").appName("Spark2JdbcDs").getOrCreate();
public static void main(String[] args)
//JDBC connection properties
final Properties connectionProperties = new Properties();
connectionProperties.put("user", MYSQL_USERNAME);
connectionProperties.put("password", MYSQL_PWD);
connectionProperties.put("driver", "com.mysql.jdbc.Driver");
final String dbTable =
"select * from testLoad";
// Load MySQL query result as Dataset
Dataset<Row> jdbcDF =
sparkSession.read()
.jdbc(MYSQL_CONNECTION_URL, dbTable, connectionProperties);
当我执行这给我一个错误
您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '' 附近使用正确的语法 在 com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
出了什么问题,我该如何解决?
【问题讨论】:
【参考方案1】:dbTable
应该只是表名,而不是查询。
final String dbTable = "testLoad";
Dataset<Row> jdbcDF =
sparkSession.read()
.jdbc(MYSQL_CONNECTION_URL, dbTable, connectionProperties);
jdbcDF.show(); // just for testing
【讨论】:
【参考方案2】:您可以使用括在括号中并带有别名的查询:
final String dbTable = "(select * from testLoad) t";
您也可以使用变量dbTable
中的表名,如另一个答案中所述。
【讨论】:
以上是关于将 Java Spark Sql 连接到 Mysql的主要内容,如果未能解决你的问题,请参考以下文章
将 spark 应用程序连接到远程 sql 服务器时出现 jdbc 连接超时错误
使用java将oracle数据库连接到apache spark时出错
Java spark使用reduceByKey避免嵌套列表将对象连接到一个列表中