我正在加载一个带有TSV(表格分隔值)表示法的文本文件,但每行都没有键。因此,一行表示特定变量,所有后续行是该变量的值,直到出现新变量。
因此,我使用自定义分隔符加载文件(在Jupyter Notebook Python 2.7 - Pyspark中):
sheet = sc.newAPIHadoopFile(
'sample.txt',
'org.apache.hadoop.mapreduce.lib.input.TextInputFormat',
'org.apache.hadoop.io.LongWritable',
'org.apache.hadoop.io.Text',
conf={'textinputformat.record.delimiter': 'var::'}
)
我的问题是,这种多行记录的大小怎么样?单个变量的值可能是数千行。 Spark是在一台机器上一次加载文件还是将该块拆分成较小的块(块)然后进行处理?
只是想确保内存不会在处理节点上爆炸。谢谢你的任何解释。
答案 0 :(得分:2)
o.a.h.mapreduce.lib.input.TextInputFormat
返回的每个(键,值)对是包含偏移量(long
)和字符串的单个本地数据结构。没有可以在不创建自定义Hadoop InputFormat
的情况下在多个记录之间拆分值的机制。
"数千行"不是很精确的描述,但作为一个经验法则:
另请注意,大型记录可能导致资源利用率不佳。在最糟糕的情况下,每个任务最终会有一个记录,其中记账成本可能比实际执行高得多。