不用说,我是 Spark DataBricks 和 Delta 的新手。
我正在尝试使用 %sql 从简单的 csv 创建一个增量表,其中第一行是标题行。不幸的是,我似乎无法获得初始 CREATE TABLE 来识别 CSV 中的标题列(请注意,我一直在使用 DataBricks 快速入门作为指南 - https://docs.databricks.com/delta/quick -start.html)
我在 Databricks 笔记本中得到的代码是
%sql
CREATE TABLE people
USING delta
LOCATION '/dbfs/mnt/mntdata/DimTransform/People.csv'
Run Code Online (Sandbox Code Playgroud)
我尝试使用 TBLPROPERTIES ("headers" = "true") 但没有成功 - 见下文
%sql
CREATE TABLE people
USING delta
TBLPROPERTIES ("headers" = "true")
AS SELECT *
FROM csv.'/mnt/mntdata/DimTransform/People.csv'
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,csv 数据都会加载到表中,但标题行仅作为第一个标准行包含在数据中。
从 csv 加载时,我如何让这个 %sql CREATE TABLE 将第一个/标题行识别为标题?
谢谢
我在 Azure SQL 数据库中有一个表,我想根据某些条件从 Azure Databricks 中删除选定的行或整个表。目前我正在使用JDBC的truncate属性来截断整个表而不删除它,然后用新的数据帧重写它。
df.write \
.option('user', jdbcUsername) \
.option('password', jdbcPassword) \
.jdbc('<connection_string>', '<table_name>', mode = 'overwrite', properties = {'truncate' : 'true'} )
Run Code Online (Sandbox Code Playgroud)
但是以后我不想每次都截断和覆盖整个表,而是使用 delete 命令。我也无法使用下推查询来实现这一点。对此的任何帮助将不胜感激。
pyspark pyspark-sql azure-sql-database databricks azure-databricks
我第一次使用 azure databricks 来读取一些文件并尝试使用 python 和 dbutils.fs.ls("/mnt")
但是我收到一条错误消息,说 dbutils 没有 fs 模块。我正在阅读并说所有数据块都已经带有 dbutils。
AttributeError: module 'dbutils' has no attribute 'fs'
Run Code Online (Sandbox Code Playgroud)
如果我做
print(dir(dbutils))
Run Code Online (Sandbox Code Playgroud)
['控制台','DBUtils','FileInfo','Iterable','ListConverter','MapConverter','MountInfo','NotebookExit','Py4JJavaError','SecretMetadata','SecretScope','WidgetsHandlerImpl','内置','缓存',' doc ','文件','加载器',' name ',' package ',' spec ','absolute_import','makeTensorboardManager','namedtuple','print_function','range' , 'stderr', 'stdout', 'string_types', 'sys', 'zip']
我发现它假设已经安装了该库 https://docs.databricks.com/user-guide/dev-tools/dbutils.html#dbutils
有魔术吗?我想检查我是否有一个文件被挂载,如果没有挂载并卸载它。
我是 Azure Databricks 的新手,我的导师建议我完成机器学习训练营:
不幸的是,成功设置 Azure Databricks 后,我在步骤 2 中遇到了一些问题。我成功将 1_01_introduction 文件作为笔记本添加到我的工作区。然而,虽然本教程讨论了如何在 Azure Blob 存储中挂载数据,但它似乎跳过了该步骤,这导致接下来的所有教程编码步骤都会引发错误。第一个代码位(教程告诉我运行)以及随后出现的错误包含在下面。
%运行“../presenter/includes/mnt_blob”
找不到笔记本:presenter/includes/mnt_blob。笔记本可以通过相对路径(./Notebook 或 ../folder/Notebook)或绝对路径(/Abs/Path/to/Notebook)指定。确保您指定的路径正确。
堆栈跟踪:/1_01_introduction:python
据我所知,Azure Blob 存储尚未设置,因此我运行的代码(以及以下所有步骤中的代码)无法找到应该是的教程项目存储在 blob 中。各位好心人能提供的任何帮助将不胜感激。
我正在使用 Azure Databricks。使用 Microsoft Learn 网站上指定的文档,我成功地将 BLOB 存储 (ADLS Gen2) 安装到我的 Databricks。
但是,当我尝试列出已安装存储的内容时,出现以下错误:
ExecutionError: An error occurred while calling z:com.databricks.backend.daemon.dbutils.FSUtils.ls.
: GET https://xxxxxxxxxxxxx.dfs.core.windows.net/xxxxxxx?resource=filesystem&maxResults=5000&timeout=90&recursive=false
StatusCode=403
StatusDescription=This request is not authorized to perform this operation using this permission.
ErrorCode=AuthorizationPermissionMismatch
Run Code Online (Sandbox Code Playgroud)
我已经检查了权限,并且我的 ServicePrincipal 已被分配角色“存储 BLOB 数据贡献者”,该角色允许对我的存储容器进行读/写访问。
有人知道我缺少哪一部分才能使其正常工作吗?非常感谢您的帮助。
我在网上搜索了一下,网上提供的解决方案并没有解决我的问题。我正在尝试读取分层目录下的镶木地板文件。我收到以下错误。
'无法推断 Parquet 的架构。必须手动指定。;'
我的目录结构如下: dbfs:/mnt/sales/region/country/2020/08/04
年文件夹下将有多个月份子目录,月份文件夹下将有后续的子目录。
我只想在销售级别阅读它们,这应该为我提供所有区域的信息,并且我已经尝试了以下两个代码,但它们都不起作用。请在这件事上给予我帮助。
spark.read.parquet("dbfs:/mnt/sales/*")
Run Code Online (Sandbox Code Playgroud)
或者
spark.read.parquet("dbfs:/mnt/sales/")
Run Code Online (Sandbox Code Playgroud) 我正在使用 pyspark 中的 to_json 将 dataframe 中的结构列转换为 json 列,但少数结构字段中的空值在 json 中被忽略,我不希望忽略空值。
我正在尝试在连接到 Azure Data Lake Gen2 帐户的 Azure Databricks 工作区中简化开发人员/数据科学家的笔记本创建过程。现在,每个笔记本的顶部都有这个:
%scala
spark.sparkContext.hadoopConfiguration.set("fs.azure.account.auth.type.<datalake.dfs.core.windows.net", "OAuth")
spark.sparkContext.hadoopConfiguration.set("fs.azure.account.oauth.provider.type.<datalake>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
spark.sparkContext.hadoopConfiguration.set("fs.azure.account.oauth2.client.id.<datalake>.dfs.core.windows.net", <SP client id>)
spark.sparkContext.hadoopConfiguration.set("fs.azure.account.oauth2.client.secret.<datalake>.dfs.core.windows.net", dbutils.secrets.get(<SP client secret>))
spark.sparkContext.hadoopConfiguration.set("fs.azure.account.oauth2.client.endpoint.<datalake>.dfs.core.windows.net", "https://login.microsoftonline.com/<tenant>/oauth2/token")
Run Code Online (Sandbox Code Playgroud)
我们的实现试图避免安装在 DBFSS 中,因此我一直在尝试查看是否可以使用集群上的 Spark 配置来定义这些值(每个集群可以访问不同的数据湖)。
但是,我还无法让它发挥作用。当我尝试各种口味时:
org.apache.hadoop.fs.azure.account.oauth2.client.id.<datalake>.dfs.core.windows.net <sp client id>
org.apache.hadoop.fs.azure.account.auth.type.<datalake>.dfs.core.windows.net OAuth
org.apache.hadoop.fs.azure.account.oauth.provider.type.<datalake>.dfs.core.windows.net "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider"
org.apache.hadoop.fs.azure.account.oauth2.client.secret.<datalake>.dfs.core.windows.net {{secrets/secret/secret}}
org.apache.hadoop.fs.azure.account.oauth2.client.endpoint.<datalake>.dfs.core.windows.net "https://login.microsoftonline.com/<tenant>"
Run Code Online (Sandbox Code Playgroud)
我收到“初始化配置失败” 上面的版本看起来默认尝试使用存储帐户访问密钥而不是 SP 凭据(这只是使用一个简单的ls命令进行测试以确保其有效)。
ExecutionError: An error occurred while calling z:com.databricks.backend.daemon.dbutils.FSUtils.ls.
: Failure to initialize configuration
at shaded.databricks.v20180920_b33d810.org.apache.hadoop.fs.azurebfs.services.SimpleKeyProvider.getStorageAccountKey(SimpleKeyProvider.java:51)
at shaded.databricks.v20180920_b33d810.org.apache.hadoop.fs.azurebfs.AbfsConfiguration.getStorageAccountKey(AbfsConfiguration.java:412)
at shaded.databricks.v20180920_b33d810.org.apache.hadoop.fs.azurebfs.AzureBlobFileSystemStore.initializeClient(AzureBlobFileSystemStore.java:1016)
Run Code Online (Sandbox Code Playgroud)
我希望有办法解决这个问题,尽管如果唯一的答案是“你不能这样做”,这当然是一个可以接受的答案。
我正在尝试读取镶木地板文件来保存架构,然后在读取 csv 文件时使用此架构将其分配给数据帧。
fee.parquet该文件loan__fee.csv具有相同的内容,但文件格式不同。
下面是我的代码 - 我收到一个错误,架构应该是“StructType”。如何将从镶木地板文件读取的模式转换为 StructType
from pyarrow.parquet import ParquetFile
import pyarrow.parquet
fee_schema = pyarrow.parquet.read_schema("/dbfs/FileStore/fee.parquet", memory_map=True)
df_mod = spark.read.csv('/FileStore/loan__fee.csv', header="true", schema=fee_schema)
Run Code Online (Sandbox Code Playgroud)
它给出错误:
类型错误:架构应该是 StructType 或字符串
我尝试了几个选项,例如fee_schema.to_string(show_schema_metadata = True)但它不起作用并给出 ParseError。
谢谢你的时间!
这个命令运行良好有什么原因吗:
%sql SELECT * FROM Azure.Reservations WHERE timestamp > '2021-04-02'
Run Code Online (Sandbox Code Playgroud)
返回 2 行,如下:
%sql DELETE FROM Azure.Reservations WHERE timestamp > '2021-04-02'
Run Code Online (Sandbox Code Playgroud)
失败并显示:
SQL语句中的错误:AssertionError:断言失败:没有DeleteFromTable的计划(timestamp#394 > 1617321600000000)
?
我是 Databricks 新手,但我确信我在另一个表上运行了类似的命令(没有 WHERE 子句)。该表是基于 Parquet 文件创建的。
azure-databricks ×10
databricks ×5
pyspark ×4
python ×4
apache-spark ×3
azure ×3
delta-lake ×2
pyarrow ×1
pyspark-sql ×1
struct ×1
to-json ×1