Apache spark 在Spark中阅读分割拼花地板
我有一个如下所示的阶段数据目录,我希望能够将2018年和2019年的数据读取到一个数据帧中,而无需单独读取和合并 据我所知,我应该能够给spark汽车的数据目录,并应用一个过滤器,哪一个spark会按下?当我尝试这样做时,它说模式无法推断,所以必须手动定义 注意:我需要在不将年份文件夹名称更改为year=2018的情况下执行此操作 如何为以下数据指定架构?我已经试着研究过了,但是找不到 如何将数据加载为spark.parquet'car_data'。过滤器'year>2019',以便按下过滤器,只加载2019-20年的数据? 有人知道.mani文件的用途吗? 提前谢谢Apache spark 在Spark中阅读分割拼花地板,apache-spark,pyspark,apache-spark-sql,parquet,Apache Spark,Pyspark,Apache Spark Sql,Parquet,我有一个如下所示的阶段数据目录,我希望能够将2018年和2019年的数据读取到一个数据帧中,而无需单独读取和合并 据我所知,我应该能够给spark汽车的数据目录,并应用一个过滤器,哪一个spark会按下?当我尝试这样做时,它说模式无法推断,所以必须手动定义 注意:我需要在不将年份文件夹名称更改为year=2018的情况下执行此操作 如何为以下数据指定架构?我已经试着研究过了,但是找不到 如何将数据加载为spark.parquet'car_data'。过滤器'year>2019',以便按下过滤器,
car_data
|---2018
|---xxx.snappy.parquet
|---xxx.snappy.parquet
|---xxx.snappy.parquet.mani
|---2019
|---xxx.snappy.parquet
|---xxx.snappy.parquet
|---xxx.snappy.parquet.mani
|---2020
|---xxx.snappy.parquet
|---xxx.snappy.parquet.mani
对于您的用例,应用谓词、向下推并加载相关数据并不是直接的。如前所述,您没有像year=2018这样的列,因此在这种情况下,您需要选择不同的方法 创建一个接受数组[2018、2019]的函数,它应该在谓词的帮助下构造一个路径,并最终返回一个路径集合。 Seq/car_data/2018/,/car_data/2019/ 将集合传递给spark.read.parquetpaths:String*,它基本上加载给定路径的所有数据。因此,在本例中,您将在单个数据帧中获得2018年和2019年的数据 为了方便起见,可以将第二项作为可重用函数 更新帖子:
如果您想将年份作为相应数据集的列之一,那么迭代collectionyears->动态构建路径->加载数据->添加具有相应值的新列year,并最终合并结果。在对Hive table进行了一些实验后,我意识到有一个解决方案适合您:您可以 因此,您要做的第一件事是创建一个包含所有模式的表,包括所有可能的分区,并在每个分区中添加一些虚拟数据以触发分区创建 创建一个按日期分割的字符串; 将“A”、“2020-01-01”插入测试值中; -注意这个分区的当前位置是 -`/apps/hive/warehouse/default.db/test/date\u part=2020-01-01` 现在您可以通过 更改表测试分区日期\u部分=2020-01-01 设置位置/apps/hive/warehouse/default.db/test/2020-01-01; 你们都准备好了 从日期为2020-01-01的测试中选择* - +--+-------+ -| a |日期| U部分| - +--+-------+ -| A | 2020-01-01| - +--+-------+
谢谢,问题是这个方法没有添加年份列,我想能够区分每一行的来源。你知道parquet.mani文件是什么吗?@Dee更新了帖子,我不知道parquet.mani文件我知道我可以做上述操作,你没有错,但我想避免加入工会,因为将有很多df/文件要提交给union。Spark说,如果文件夹名称不是year=2008,我必须手动指定模式,因此我需要知道如何在模式中指定2008或每个文件夹名称应放在一个year列中。我无法获得大量df文件,例如:2018->携带100个拼花地板,2019->携带120个拼花地板文件,您将2018年的数据作为一个单独的DF加载,将新的列年份设置为2018年,将2019年的数据作为一个单独的DF加载,将新的列年份设置为2019年,最后将两个DF合并为一个DF。结果,DF中的每个记录都有年份列。是否可以将路径从2020重命名为year=2020,或者制作替代副本?不,很遗憾,无法更改原始数据。另外,如果我可以更改名称,我也不会发布这个问题,我正在寻找替代方案,Spark说模式需要手动指定,但我看不到关于如何构造它的任何指导。不幸的是,无法更改原始数据,但如果我可以更改文件夹的命名,我也不会发布问题。我正在寻找一个替代方案,因为Spark说模式需要手动指定,但我看不到任何关于如何构造它的指导