PySpark(Python):通过SparkContext.newAPIHadoopFi

2024-09-27 22:39:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在加载一个文本文件,它以TSV(tablar separated value)符号表示,但每行中没有键。因此,一行表示一个特定的变量,下面所有的行都是该变量的值,直到出现新的变量为止。在

因此,我使用自定义分隔符加载文件(在Jupyter笔记本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是一次在一台机器上加载文件,还是将块分割成更小的块(块),然后再进行处理?在

只想确保处理节点上的内存不会爆炸。谢谢你的解释。在

reading multiline records


Tags: 文件ioorghadooptsvvalueapache符号
1条回答
网友
1楼 · 发布于 2024-09-27 22:39:43

o.a.h.mapreduce.lib.input.TextInputFormat返回的每个(key,value)对都是一个包含偏移量(long)和字符串的单个本地数据结构。没有一种机制可以在不创建自定义Hadoop ^{}的情况下在多个记录之间拆分值。在

“千言万语”不是很精确的描述,但作为经验法则:

  • 如果磁盘上的大小小于几兆字节,您很可能会很好地使用。在
  • 否则,您将不得不跟踪内存使用情况和GC并调整配置。在

还要记住,大记录可能导致资源利用率不理想。在最坏的情况下,每个任务可能只有一条记录,而记账成本可能远高于实际执行的成本。在

相关问题 更多 >

    热门问题