Spark分区发现未根据文件夹结构对数据进行分区
我在其中有一个名为list的目录,我在每个国家/地区都有一个文件夹,其标签为COUNTRY = US等,在这些国家/地区中,我有一个文件夹调用区域,标签为IKE REGION = NORTH,在region文件夹中有多个csv文件。
现在,我想使用spark 2.3数据帧API在spark中读取此数据,而在读取数据时我正在使用base-path选项,以便spark会自动发现下划线分区。
因为我有2个国家/地区文件夹,并且在一个国家/地区内,我有5个地区,在第二个国家/地区内,我有2个地区。所以总共我有7个地区。因此,我的数据框应将分区号显示为7,而不是数据框将分区数显示为5。
这是供您参考的代码
start = time.time()
path = "D:\\Sonika\\Propcount\\*\\*\\*.txt"
df_probe_count_base = spark.read.option("header", "true")\
.option("basePath", "D:\\Sonika\\Propcount")\
.option("Delimiter", ",").csv(path)
print("df_probe_count_base",df_probe_count_base.rdd.getNumPartitions())
end = time.time()
我也尝试查看哪个行属于哪个分区,并惊讶地发现它随机将日期分配到4个分区中。即在一个分区中,我可以看到这些行属于2个不同的国家,具有2个不同的区域
print(df_probe_count_base.rdd.glom().collect())
[
Row(_c0='txt', _c1='RowNumber', COUNTRY='CAN', REGION='Reg2'),
Row(_c0='0', _c1='1', COUNTRY='CAN', REGION='Reg2'),
Row(_c0='0', _c1='2', COUNTRY='CAN', REGION='Reg2'),
Row(_c0='0', _c1='3', COUNTRY='CAN', REGION='Reg2'),
Row(_c0='0', _c1='4', COUNTRY='CAN', REGION='Reg2'),
Row(_c0='0', _c1='5', COUNTRY='CAN', REGION='Reg2'),
Row(_c0='0', _c1='6', COUNTRY='CAN', REGION='Reg2'),
Row(_c0='0', _c1='7', COUNTRY='CAN', REGION='Reg2'),
Row(_c0='0', _c1='8', COUNTRY='CAN', REGION='Reg2'),
Row(_c0='0', _c1='9', COUNTRY='CAN', REGION='Reg2'),
Row(_c0='0', _c1='10', COUNTRY='CAN', REGION='Reg2'),
Row(_c0='txt', _c1='RowNumber', COUNTRY='ABC', REGION='Reg1'),
Row(_c0='0', _c1='1', COUNTRY='ABC', REGION='Reg1'),
Row(_c0='0', _c1='2', COUNTRY='ABC', REGION='Reg1'),
Row(_c0='0', _c1='3', COUNTRY='ABC', REGION='Reg1'),
Row(_c0='0', _c1='4', COUNTRY='ABC', REGION='Reg1'),
Row(_c0='0', _c1='5', COUNTRY='ABC', REGION='Reg1'),
Row(_c0='0', _c1='6', COUNTRY='ABC', REGION='Reg1'),
Row(_c0='0', _c1='7', COUNTRY='ABC', REGION='Reg1'),
Row(_c0='0', _c1='8', COUNTRY='ABC', REGION='Reg1'),
Row(_c0='0', _c1='9', COUNTRY='ABC', REGION='Reg1'),
Row(_c0='0', _c1='10', COUNTRY='ABC', REGION='Reg1')
]
这与配置单元分区不同,因为在HIVE中,该分区只有一个文件,在这种情况下,您可能会有多个文件
任何人都可以建议