如何在Azure Databricks中读取Parquet文件?语法错误排查
在Azure Databricks中读取Parquet文件的正确方法
首先你代码里的转义引号"是语法错误的直接原因,换成普通双引号或单引号就能解决基础语法问题。下面是具体的正确写法和注意事项:
基础正确写法
读取整个文件夹的Parquet文件(推荐)
无需指定单个part文件,Spark会自动加载文件夹下所有Parquet文件:
val data = spark.read.parquet("abfss://containername@storagename.dfs.core.windows.net/TestFolder/XYZ/") display(data)
读取单个Parquet文件
如果只需要读取特定文件,修正引号后即可:
val data = spark.read.parquet("abfss://containername@storagename.dfs.core.windows.net/TestFolder/XYZ/part-00000-1cf0cf7b-6c9f-41-a268-be-c000.snappy.parquet") display(data)
必须提前配置存储访问权限
光有正确代码还不够,得确保Databricks集群能访问你的存储账户,常用两种配置方式:
1. 服务主体认证
在集群的Spark配置里添加以下参数(替换成你的实际值):
spark.conf.set("fs.azure.account.auth.type.storagename.dfs.core.windows.net", "OAuth") spark.conf.set("fs.azure.account.oauth.provider.type.storagename.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider") spark.conf.set("fs.azure.account.oauth2.client.id.storagename.dfs.core.windows.net", "<你的客户端ID>") spark.conf.set("fs.azure.account.oauth2.client.secret.storagename.dfs.core.windows.net", "<你的客户端密钥>") spark.conf.set("fs.azure.account.oauth2.client.endpoint.storagename.dfs.core.windows.net", "https://login.microsoftonline.com/<你的租户ID>/oauth2/token")
2. SAS令牌认证
如果用SAS密钥,直接把SAS令牌拼在路径后面:
val sasToken = "?sv=2023-01-03&ss=bfqt&srt=sco&sp=rwdlacupiytfx&se=2024-12-31T23:59:59Z&st=2024-01-01T00:00:00Z&spr=https&sig=xxx" val data = spark.read.parquet(s"abfss://containername@storagename.dfs.core.windows.net/TestFolder/XYZ/$sasToken") display(data)
额外优化技巧
如果需要自定义读取规则,比如指定schema、压缩格式,可以用.option()或.schema()方法:
import org.apache.spark.sql.types._ // 自定义schema val customSchema = StructType(Array( StructField("col1", StringType, nullable = true), StructField("col2", IntegerType, nullable = true) )) val data = spark.read.schema(customSchema).parquet("abfss://containername@storagename.dfs.core.windows.net/TestFolder/XYZ/") display(data)
内容的提问来源于stack exchange,提问作者ZZZSharePoint
相关产品推荐
相关产品推荐

