【发布时间】:2021-03-27 10:39:29
【问题描述】:
我有一个 SQL 文件,其中包含许多这样的 SQL 查询:
CREATE TABLE ..... ;
ALTER TABLE .... ;
我想在单个 spark.sql 调用中执行这些查询
如何在 JAVA 中实现这一点?
谢谢
【问题讨论】:
标签: java apache-spark
我有一个 SQL 文件,其中包含许多这样的 SQL 查询:
CREATE TABLE ..... ;
ALTER TABLE .... ;
我想在单个 spark.sql 调用中执行这些查询
如何在 JAVA 中实现这一点?
谢谢
【问题讨论】:
标签: java apache-spark
Spark 不支持通过一次调用 spark.sql 来执行多个查询(请参阅 this SO answer)。如果您不介意多次调用spark.sql,可以将.sql 文件读入一个字符串,将其拆分为单独的查询,然后将其传递给spark.sql,如下所示:
import java.nio.file.*;
public static void main(String[] args) {
String[] commands;
try {
Path sqlPath = FileSystems.getDefault().getPath("query.sql");
String sql = new String(Files.readAllBytes(sqlPath));
commands = sql.split(";", 0);
} catch (Exception e) {
System.out.println("failed to read SQL file");
return;
}
for (int i = 0; i < commands.length; i++) {
spark.sql(commands[i]);
}
}
【讨论】:
spark.sql(sql)吗?为什么要将查询的执行返回到数据集中?
;分割
Q: How can I do A? A: Do B 和 Q: How can I do A? A: You can't, but you can do B 之间的区别很大。前者使原始问题悬而未决。否则,您的回答很好。我建议您将您刚刚在您的评论中对我所做的陈述添加到您的答案顶部。 (ps:这不仅仅是语义。我认为在一次调用中完成所有操作会更有效。此外,由于上下文的原因,在一次调用中执行两件事而不是两件事可能会产生不同的结果)