Databricks读取文件报错‘local filesystem access is forbidden’求助
解决Databricks读取文件的权限错误及字段提取方法
错误原因
你遇到的local filesystem access is forbidden错误,是因为使用了file:///file:/协议直接访问文件系统。Databricks集群运行在云端,禁止通过本地文件协议直接访问Workspace或本地PC的文件,必须使用Databricks支持的DBFS路径格式。
一、读取文件的正确方法
场景1:读取Databricks Workspace中的文件
将路径前缀改为dbfs:/,Spark通过DBFS可以直接访问Workspace内的文件,修正后的代码如下:
Scala代码
%scala val file_location = "dbfs:/Workspace/Users/jmacevedo@hidden.com/dades_NO_CSV.20170101" val file_type = "csv" val infer_schema = "false" val first_row_is_header = "true" val delimiter = ";" val df = spark.read.format(file_type) .option("inferSchema", infer_schema) .option("header", first_row_is_header) .option("sep", delimiter) .load(file_location) display(df)
Python代码
%python file_location = "dbfs:/Workspace/Users/jmacevedo@hidden.com/dades_NO_CSV.20170101" file_type = "csv" infer_schema = False first_row_is_header = True delimiter = ";" df = spark.read.format(file_type) .option("inferSchema", infer_schema) .option("header", first_row_is_header) .option("sep", delimiter) .load(file_location) display(df)
场景2:读取本地PC的文件
Databricks集群无法直接访问本地PC的文件系统,必须先上传文件到Databricks:
- 方式1:通过Databricks UI上传到你的Workspace个人文件夹,然后用场景1的路径读取
- 方式2:上传到DBFS(比如
dbfs:/FileStore/uploaded_files/目录),再用对应路径读取
二、提取第一条记录的mm_aaaa字段
Scala实现
// 快速提取字段值 val firstMmAaaa = df.select("mm_aaaa").first().getString(0) println(firstMmAaaa) // 或者先取整条记录再提取 val firstRecord = df.first() val mmAaaaValue = firstRecord.getAs[String]("mm_aaaa") println(mmAaaaValue)
Python实现
# 直接提取字段值 first_mm_aaaa = df.select("mm_aaaa").first()[0] print(first_mm_aaaa) # 或者取整条记录后提取(大数据量不建议用collect) first_record = df.collect()[0] mm_aaaa_value = first_record["mm_aaaa"] print(mm_aaaa_value)
内容的提问来源于stack exchange,提问作者Jose Maria Acevedo Reinoso
相关产品推荐
相关产品推荐

