我尝试使用spark-sql&运行基本的java程序JDBC。我遇到了以下错误。不知道这里有什么问题。我读过的大部分材料都没有谈到解决这个问题需要做些什么。
如果有人能指出我在Spark-sql(Spark-2.1.1)上阅读的一些好材料,也会很棒。我计划使用spark实现ETL,连接到MySQL和其他数据源。
线程中的异常" main" org.apache.spark.sql.AnalysisException:找不到表或视图:myschema.mytable
;第1行pos 21;
String MYSQL_CONNECTION_URL = "jdbc:mysql://localhost:3306/myschema";
String MYSQL_USERNAME = "root";
String MYSQL_PWD = "root";
Properties connectionProperties = new Properties();
connectionProperties.put("user", MYSQL_USERNAME);
connectionProperties.put("password", MYSQL_PWD);
Dataset<Row> jdbcDF2 = spark.read()
.jdbc(MYSQL_CONNECTION_URL, "myschema.mytable", connectionProperties);
spark.sql("SELECT COUNT(*) FROM myschema.mytable").show();
答案 0 :(得分:5)
这是因为Spark没有在Spark SQL Context中默认注册来自连接的任何模式中的任何表。您必须自己注册:
jdbcDF2.createOrReplaceTempView("mytable");
spark.sql("select count(*) from mytable");
您的jdbcDF2在MySQL的myschema.mytable
中有一个来源,并会在某些操作中加载此表中的数据。
请记住,MySQL表与Spark表或视图不同。您告诉Spark从MySQL读取数据,但您必须在当前Spark SQL Context或Spark Session中将此DataFrame或Dataset注册为表或视图