#java #apache-spark #apache-spark-sql
#java #apache-spark #apache-spark-sql
Вопрос:
Я столкнулся с этой проблемой, которую я не могу решить. Я пишу код javaspark с интеграцией MySQL. Я вижу, что в этом есть небольшое исправление.
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
, как сказано в другом ответе.