尝试使用 Databricks 和 SQL 创建表并将数据加载到同一个表中
Posted
技术标签:
【中文标题】尝试使用 Databricks 和 SQL 创建表并将数据加载到同一个表中【英文标题】:Trying to create a table and load data into same table using Databricks and SQL 【发布时间】:2019-10-07 23:20:15 【问题描述】:我在 Google 上搜索了一个使用 Databticks 和 Azure SQL Server 创建表并将数据加载到同一个表中的解决方案。我在网上找到了一些示例代码,看起来很简单,但显然某处存在问题。这是我的代码。
CREATE TABLE MyTable
USING org.apache.spark.sql.jdbc
OPTIONS (
url "jdbc:sqlserver://server_name_here.database.windows.net:1433;database = db_name_here",
user "u_name",
password "p_wd",
dbtable "MyTable"
);
现在,这是我的错误。
SQL 语句中的错误:SQLServerException:无效的对象名称“MyTable”。
很遗憾,我的密码中有空格。这可能是问题所在,但我不这么认为。
基本上,我想让它递归地遍历文件夹和子文件夹中的文件,并从具有字符串模式的文件中加载数据,如“ABC *”,并将所有这些文件递归地加载到表中。此处的障碍是我还需要将文件名加载到字段中。因此,我想将许多文件中的数据加载到 4 个实际数据字段和 1 个捕获文件名的字段中。我可以区分不同数据集的唯一方法是使用文件名。这可能吗?或者,这是徒劳的练习吗?
【问题讨论】:
【参考方案1】:我的建议是使用 Azure SQL Spark 库,文档中也提到过:
https://docs.databricks.com/spark/latest/data-sources/sql-databases-azure.html#connect-to-spark-using-this-library
“批量复制”是您想要用来获得良好性能的东西。只需将文件加载到 DataFrame 并将其批量复制到 Azure SQL
https://docs.databricks.com/data/data-sources/sql-databases-azure.html#bulk-copy-to-azure-sql-database-or-sql-server
要从子文件夹中读取文件,答案在这里:
How to import multiple csv files in a single load?
【讨论】:
我从 Spark 开始并切换到 SQL,只是因为我无法让 Spark 做我需要的事情。我会再看看那个选项。谢谢!!【参考方案2】:我终于,终于,终于搞定了。
val myDFCsv = spark.read.format("csv")
.option("sep","|")
.option("inferSchema","true")
.option("header","false")
.load("mnt/rawdata/2019/01/01/client/ABC*.gz")
myDFCsv.show()
myDFCsv.count()
感谢您指出正确的方向 mauridb!
【讨论】:
我的荣幸 :) :) :)以上是关于尝试使用 Databricks 和 SQL 创建表并将数据加载到同一个表中的主要内容,如果未能解决你的问题,请参考以下文章
使用带有 python 公式的 Databricks 数据框创建一个新的计算字段写回 sql 表
如何使用 Spark sql 在 Databricks 中使用内部联接更新 Databricks Delta 表