gpt4 book ai didi

java - Spark read() 有效,但 sql() 抛出数据库未找到

转载 作者:行者123 更新时间:2023-12-01 18:00:13 26 4
gpt4 key购买 nike

我正在使用 Spark 2.1 从 Java 中的 Cassandra 读取数据。我尝试了 https://stackoverflow.com/a/39890996/1151472 中发布的代码(使用 SparkSession)并且它起作用了。然而,当我用spark.sql()替换spark.read()方法时,抛出以下异常:

Exception in thread "main" org.apache.spark.sql.AnalysisException: Table or view not found: `wiki`.`treated_article`; line 1 pos 14;
'Project [*]
+- 'UnresolvedRelation `wiki`.`treated_article`

at org.apache.spark.sql.catalyst.analysis.package$AnalysisErrorAt.failAnalysis(package.scala:42)

我对读取和 sql 方法使用相同的 Spark 配置

read()代码:数据集数据集 =

spark.read().format("org.apache.spark.sql.cassandra")
.options(new HashMap<String, String>() {
{
put("keyspace", "wiki");
put("table", "treated_article");
}
}).load();

sql() 代码:

spark.sql("SELECT * FROM WIKI.TREATED_ARTICLE");

最佳答案

Spark Sql 使用目录来查找数据库和表引用。当您写入不在目录中的表标识符时,它将引发类似于您发布的错误。 read 命令不需要目录,因为您需要在调用中指定所有相关信息。

您可以通过以下方式将条目添加到目录中

将数据集注册为 View

首先创建您的数据集

spark.read().format("org.apache.spark.sql.cassandra")
.options(new HashMap<String, String>() {
{
put("keyspace", "wiki");
put("table", "treated_article");
}
}).load();

然后使用目录注册表功能之一

void    createGlobalTempView(String viewName)
Creates a global temporary view using the given name.
void createOrReplaceTempView(String viewName)
Creates a local temporary view using the given name.
void createTempView(String viewName)
Creates a local temporary view using the given name

OR 使用 SQL Create 语句

   CREATE TEMPORARY VIEW words
USING org.apache.spark.sql.cassandra
OPTIONS (
table "words",
keyspace "test",
cluster "Test Cluster",
pushdown "true"
)

通过这两种方法之一添加到目录后,您可以在该上下文发出的所有 sql 调用中引用该表。

<小时/>

示例

CREATE TEMPORARY VIEW words
USING org.apache.spark.sql.cassandra
OPTIONS (
table "words",
keyspace "test"
);

SELECT * FROM words;
// Hello 1
// World 2
<小时/>

Datastax(我的雇主)企业版软件通过将条目放置在 Spark 用作目录的 Hive Metastore 中,自动注册所有 Cassandra 表。这使得所有表格无需手动注册即可访问。

此方法允许使用 select 语句,而无需附带 CREATE VIEW

关于java - Spark read() 有效,但 sql() 抛出数据库未找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41582657/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com