将java spark sql连接到mysql

6kkfgxo0  于 2021-07-06  发布在  Java
关注(0)|答案(2)|浏览(271)

我面临着这个我无法解决的问题。我正在用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语法有错误;在com.mysql.cj.jdbc.exceptions.sqlerror.createsqlexception(sqlerror)的第1行中,检查与您的mysql服务器版本对应的手册,以获取在“”附近使用的正确语法。java:120)
有什么问题,我该怎么解决?

f87krz0w

f87krz0w1#

dbTable 应该只是表名,而不是查询。

final String dbTable = "testLoad";
    Dataset<Row> jdbcDF =
            sparkSession.read()
                    .jdbc(MYSQL_CONNECTION_URL, dbTable, connectionProperties);
    jdbcDF.show(); // just for testing
5lhxktic

5lhxktic2#

可以使用括在括号中并带有别名的查询:

final String dbTable = "(select * from testLoad) t";

也可以在变量中使用表名 dbTable ,如另一个答案所说。

相关问题