我有一些日常的數據保存到文件夾多(主要是基於時間)。現在我有兩種格式來存儲文件一個是實木複合地板,另一個是csv,我想保存爲鑲木地板格式以節省一些空間。 的文件夾結構類似於以下內容:如何讓火花2.0閱讀輯陣文件夾鑲如CSV
[[email protected] raw]# tree
.
├── entityid=10001
│ └── year=2017
│ └── quarter=1
│ └── month=1
│ ├── day=6
│ │ └── part-r-00000-84f964ec-f3ea-46fd-9fe6-8b36c2433e8e.snappy.parquet
│ └── day=7
│ └── part-r-00000-84f964ec-f3ea-46fd-9fe6-8b36c2433e8e.snappy.parquet
├── entityid=100055
│ └── year=2017
│ └── quarter=1
│ └── month=1
│ ├── day=6
│ │ └── part-r-00000-84f964ec-f3ea-46fd-9fe6-8b36c2433e8e.snappy.parquet
│ └── day=7
│ └── part-r-00000-84f964ec-f3ea-46fd-9fe6-8b36c2433e8e.snappy.parquet
├── entityid=100082
│ └── year=2017
│ └── quarter=1
│ └── month=1
│ ├── day=6
│ │ └── part-r-00000-84f964ec-f3ea-46fd-9fe6-8b36c2433e8e.snappy.parquet
│ └── day=7
│ └── part-r-00000-84f964ec-f3ea-46fd-9fe6-8b36c2433e8e.snappy.parquet
└── entityid=10012
└── year=2017
└── quarter=1
└── month=1
├── day=6
│ └── part-r-00000-84f964ec-f3ea-46fd-9fe6-8b36c2433e8e.snappy.parquet
└── day=7
└── part-r-00000-84f964ec-f3ea-46fd-9fe6-8b36c2433e8e.snappy.parquet
現在我有一個Python列表存儲所有文件夾需要讀,假設每次運行只需要閱讀一些關於過濾條件的文件夾基地。
folderList=df_inc.collect()
folderString=[]
for x in folderList:
folderString.append(x.folders)
In [44]: folderString
Out[44]:
[u'/data/raw/entityid=100055/year=2017/quarter=1/month=1/day=7',
u'/data/raw/entityid=10012/year=2017/quarter=1/month=1/day=6',
u'/data/raw/entityid=100082/year=2017/quarter=1/month=1/day=7',
u'/data/raw/entityid=100055/year=2017/quarter=1/month=1/day=6',
u'/data/raw/entityid=100082/year=2017/quarter=1/month=1/day=6',
u'/data/raw/entityid=10012/year=2017/quarter=1/month=1/day=7']
該文件由writen:
df_join_with_time.coalesce(1).write.partitionBy("entityid","year","quarter","month","day").mode("append").parquet(rawFolderPrefix)
當我嘗試閱讀df_batch=spark.read.parquet(folderString)
錯誤java.lang.ClassCastException存儲在folderString的文件夾:java.util.ArrayList中不能轉換爲Java。 lang.String遇到。
,如果我將文件保存爲CSV格式閱讀下面通過它就可以工作細如下面的代碼:請無論如何,如果讀木地板文件夾中的文件列表,非常感激!
In [46]: folderList=df_inc.collect()
...: folderString=[]
...:
...: for x in folderList:
...: folderString.append(x.folders)
...: df_batch=spark.read.csv(folderString)
...:
In [47]: df_batch.show()
+------------+---+-------------------+----------+----------+
| _c0|_c1| _c2| _c3| _c4|
+------------+---+-------------------+----------+----------+
|6C25B9C3DD54| 1|2017-01-07 00:00:01|1483718401|1483718400|
|38BC1ADB0164| 3|2017-01-06 00:00:01|1483632001|1483632000|
|38BC1ADB0164| 3|2017-01-07 00:00:01|1483718401|1483718400|
但是,如果你指向原始文件夾。像'spark.read。實木複合地板('/ data/raw')'它會正常工作。 –
感謝您的評論,我不想讀取/ data/raw下的所有文件夾,只有其中的一些存儲在列表變量folderString –