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中,该分区只有一个文件,在这种情况下,您可能会有多个文件
任何人都可以建议
您能否尝试提供.csv()方法的基本路径。
不带通配符,只有“ D:\\ Sonika \\ Propcount \\”