如何在Databricks中将JSON文件读取为字典而非DataFrame
如何在Databricks中将JSON文件读取为字典而非DataFrame
嗨,我来帮你搞定这个问题!在Databricks里把JSON直接读成Python字典,和用Spark生成DataFrame的思路完全不同,我给你两种实用方案,看哪种适合你的场景:
方案一:读取DBFS上的JSON文件(最简单)
如果你的JSON文件已经存在Databricks的DBFS文件系统里,直接用Python原生的json模块读取就行,注意要给DBFS路径加上/dbfs/前缀:
import json # 替换成你的JSON文件在DBFS上的实际路径 with open('/dbfs/path/to/your/json/file.json', 'r') as file: json_dict = json.load(file)
执行后,json_dict就是你想要的Python字典,完全不需要依赖Spark或者AWS SDK。
方案二:读取S3上的JSON文件(解决密钥问题)
你之前用boto3时遇到了密钥配置问题,在Databricks里正确引用Secrets的方式得注意,另外也可以利用Databricks的AWS集成简化操作:
正确配置boto3并读取的代码
import boto3 import json # 从Databricks Secrets中获取密钥,替换成你的scope名称和key名称 aws_access_key = dbutils.secrets.get(scope="your-secret-scope", key="aws_access_key_id") aws_secret_key = dbutils.secrets.get(scope="your-secret-scope", key="aws_secret_access_key") # 初始化S3资源 s3_resource = boto3.resource( 's3', aws_access_key_id=aws_access_key, aws_secret_access_key=aws_secret_key ) # 获取S3对象并解析为字典 s3_object = s3_resource.Object('slm-transaction-incoming', 'All_Starbucks_Locations_in_the_US.json') json_content = s3_object.get()['Body'].read().decode('utf-8') json_dict = json.loads(json_content)
简化技巧:如果S3桶已挂载到DBFS
如果你已经把目标S3桶挂载到了DBFS上,那直接用方案一的open函数读取挂载后的路径就行,连boto3都不用,比如:
import json # 替换成挂载后的DBFS路径 with open('/dbfs/mnt/your-s3-mount/path/to/file.json', 'r') as file: json_dict = json.load(file)
另外要提醒你:spark.read.format("json").load()得到的是Spark DataFrame,这是因为Spark是分布式计算框架,它的API默认生成适合分布式处理的数据集,而我们要的是本地的Python字典,所以得用Python原生的文件读取或者直接调用AWS SDK拉取内容来解析。
备注:内容来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

