python - 使用 S3 中的嵌套分区文件创建数据框,并在架构中加载具有分区列名称的数据框
问题描述
嵌套 S3 分区文件如下:
s3://alex/covid/exposure_date=**2021-02-01**/aec600b87b9a467d9395d2f5c0e2eeaa.parquet
s3://alex/covid/exposure_date=**2020-05-01**/dec600b87b9a467d9395d2f5c0e2eeaa.parquet
s3://alex/covid/exposure_date=**2021-06-01**/efe600b87b9a467d9395d2f5c0e2eeaa.parquet
s3://alex/covid/exposure_date=**2021-08-01**/acd600b87b9a467d9395d2f5c0e2eeaa.parquet
尝试了不同的阅读方式:
方式一:
df = spark.read.parquet("s3:/alex/covid/**/*.parquet")
方式二:
df=spark.read.option("recursiveFileLookup","true").parquet("s3:/alex/covid/covid_contact_mock_data.parquet/")
方式3:
df = spark.read.parquet("s3://alex/covid//**/*.parquet")
我期待分区列也是数据框列之一
在本地尝试做但得到错误
df = spark.read.parquet("C:/Users/mthma/covid_contact_mock_data.parquet/exposure_date=2020-12-03/*")
错误:
Exception in thread "globPath-ForkJoinPool-6-worker-115" java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
at org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Native Method)
at org.apache.hadoop.io.nativeio.NativeIO$Windows.access(NativeIO.java:793)
at org.apache.hadoop.fs.FileUtil.canRead(FileUtil.java:1215)
at org.apache.hadoop.fs.FileUtil.list(FileUtil.java:1420)
at org.apache.hadoop.fs.RawLocalFileSystem.listStatus(RawLocalFileSystem.java:601)
at org.apache.hadoop.fs.FileSystem.listStatus(FileSystem.java:1972)
解决方案
您在使用通配符时遇到问题。
至少在本地情况下,您可以使用以下命令将它们扩展为单个文件名:
folder = "C:/Users/mthma/covid_contact_mock_data.parquet/exposure_date=2020-12-03"
for file in glob.glob(f'{folder}/*'):
df = spark.read.parquet(file)
print(df.head())
https://docs.python.org/3/library/glob.html#glob.glob
S3 不同。您应该使用该boto3
库来查询 S3 以获取各个路径名。
推荐阅读
- python-3.x - 检测图像中的模式并检索其位置
- rest - mLab REST API - 按字符串查询
- google-apps-script - 我想用工作表中特定的静态单元格的内容填充电子邮件
- windows - 如何在 Powershell 中为变量添加时间戳
- java - 严重:开始事件引发错误 java.lang.ExceptionInInitializerError Intellij/Tomcat
- python - 如何让 PyCharm 在输出控制台中显示整个数据框?
- eiffel - Eiffel:如何设置自动测试的命令行参数?
- javascript - JavaScript 错误使用
使用 ColdFusion 2018 标记 - ios - ios 应用程序加载程序登录挂起
- laravel - Laravel Scope 查询以计算每个用户的项目类型