У меня есть некоторые ежедневные данные для сохранения в несколько папок (в основном основанных на времени). теперь у меня есть два формата для хранения файлов, один из которых - паркет, а другой - csv, я хотел бы сохранить формат паркета, чтобы сэкономить некоторое пространство. структура папки, как следующее:как исправить 2.0 чтение mutli папок паркет как 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
теперь у меня есть питон список хранит все папки должны быть считаны, предположим, что каждый раз запускать его нужно читать только некоторые из базовых папок на условиях фильтра.
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']
файлы были прописаны по:
df_join_with_time.coalesce(1).write.partitionBy("entityid","year","quarter","month","day").mode("append").parquet(rawFolderPrefix)
когда я пытаюсь прочитать папки, хранящиеся в folderString по df_batch=spark.read.parquet(folderString)
ошибке java.lang.ClassCastException: 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 –