如何通过Azure Databricks运行spark sql文件

问题描述 投票:0回答:1

我们有一个进程会将spark sql写入文件,这个进程会在生产环境中生成数千个spark sql文件。 这些文件将在 ADLS Gen2 目录中创建。

背景:此过程用于生成 PIG 脚本,并使用 MapReduce(MR)作业来读取这些脚本。此 MR 作业使用 PigServer API 将 Pig 脚本提交到 HDInsight 群集。我们正在从 HDInsight 迁移到 Databricks,并尝试使用 Databricks 实现相同的目标。

火花文件示例:

import org.apache.spark.sql.functions._
import org.apache.spark.sql.types._
val 2023_I = spark.sql("select rm.* from reu_master rm where rm.year = 2023 and rm.system_part='I'")
val criteria1_r1 = 2023_I.filter($"field_id"==="abcned" or $"field_id"==="gei")
criteria1_r1.write.mode("overwrite").save(<path_t_adls_dir>)

我们正在探索从 Azure Databricks 调用这些文件的最佳方法。我们希望避免通过 Python 将文件读取到变量并在 Spark sql 语句中使用该变量。

apache-spark apache-spark-sql azure-databricks apache-spark-dataset databricks-sql
1个回答
0
投票

最好的方法取决于您的资源,根据处理这些问题的经验,我想到了两种方法。为了避免通过 python 将文件读取到变量并在 Spark sql 语句中使用该变量,您可以使用:

  1. Databricks 中的%sql 魔法命令。

程序简单,减少开销。 示例如下: A。您必须将 Spark SQL 脚本存储在 ADLS Gen2 上的单独文件中,并假设您使用的是 Databricks Notebook。 b.在 Databricks Notebook 中,您将使用 %sql 命令直接从文件执行 SQL 脚本。您可以通过创建临时视图来引用 ADLS Gen2 路径中的文件。创建临时视图的示例代码:

%sql
CREATE OR REPLACE TEMPORARY VIEW my_temp_view AS
SELECT * FROM parquet.`<path_to_adls_gen2_file>`

c.创建视图后,您可以对其运行 Spark SQL 查询。使用 magic 命令,您的代码将如下所示:

%sql
SELECT * FROM my_temp_view WHERE field_id = 'abcned' OR field_id = 'gei'

如果您的 Databricks 集群具有访问 ADLS Gen2 存储和读取 SQL 脚本文件的必要权限,那么您应该没问题。另外,根据您的特定用例和文件位置的需要调整 SQL 脚本和命令。

我的第二个选择是避免通过 python 将文件读取到变量并在 Spark sql 语句中使用该变量。

  1. 利用 Databricks 作业和笔记本。 在这种情况下,您必须使用 Databricks 作业将 Notebook 作为任务运行,并且它还允许更多参数。
© www.soinside.com 2019 - 2024. All rights reserved.