Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 什么';将大文件写入S3的最佳方式是什么?_Scala_Apache Spark_Pyspark_Parquet_Apache Zeppelin - Fatal编程技术网

Scala 什么';将大文件写入S3的最佳方式是什么?

Scala 什么';将大文件写入S3的最佳方式是什么?,scala,apache-spark,pyspark,parquet,apache-zeppelin,Scala,Apache Spark,Pyspark,Parquet,Apache Zeppelin,我正在使用齐柏林飞艇和spark,我想从S3中获取一个2TB的文件,并在spark中对其进行转换,然后将其发送到S3,这样我就可以在Jupyter笔记本中使用该文件。转换非常简单 我把这个文件读作拼花文件。我想大约是2TB,但我不确定如何验证 它大约有10米的行和5列,所以它相当大 我尝试了my_table.write.parquet(s3path)并尝试了my_table.write.option(“maxRecordsPerFile”,200000).parquet(s3path)。我怎样才

我正在使用齐柏林飞艇和spark,我想从S3中获取一个2TB的文件,并在spark中对其进行转换,然后将其发送到S3,这样我就可以在Jupyter笔记本中使用该文件。转换非常简单

我把这个文件读作拼花文件。我想大约是2TB,但我不确定如何验证

它大约有10米的行和5列,所以它相当大


我尝试了
my_table.write.parquet(s3path)
并尝试了
my_table.write.option(“maxRecordsPerFile”,200000).parquet(s3path)
。我怎样才能写出一个大拼花文件的正确方法?

< P>这些是你可以考虑的要点……/P> 1) maxRecordsPerFile设置: 与

my_table.write.parquet(s3path)

Spark为每个任务写入一个文件

保存的文件数=正在保存的RDD/数据帧的分区数。因此,这可能会导致大得离谱的文件(当然,您可以重新分区数据并保存,重新分区意味着在网络上洗牌数据)

限制每个文件的记录数

my_table.write.option("maxRecordsPerFile", numberOfRecordsPerFile..yourwish).parquet(s3path)
它可以避免生成巨大的文件

2)如果你使用的是AWS EMR(EMRFS),这可能是你可以考虑的要点之一。

未使用EMRFS S3优化提交程序时:

  • 使用S3A文件系统时
  • 使用拼花以外的输出格式时,如ORC或文本
3) 使用压缩技术、algo版本和其他spark配置: 4) 使用s3a时的快速上传和其他道具:
  • S3a连接器将以增量方式写入块,但hadoop-2.7.x中随spark提供的(过时)版本处理得不太好。如果可以,将所有hadoop-jar更新为2.8.5或2.9.x
  • 选项
    “fs.s3a.multipart.size
    控制块的大小。有10K块的限制,因此您可以上载的最大文件大小为*10000。对于非常大的文件,请使用大于默认值“64M”的数字

  • 1000万行不一定很大,但我的计算表明,每一列都必须有一些大的json blob或其他什么?你能提供一些关于数据结构的详细信息吗。我应该如何选择每个文件的记录数?maxRecordsPerFile…你已经在你的问题中写了这个,对吗?我如何选择要使用的数字?我只是猜测而已gIt可以像Numrecordsperfile=1000万/(num executors*cores*2)是我可以提供的样本,或者如果您不知道1000万或2000万数据,那么计算大约,并用它替换1000万
    .config("spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version", 2)
    .config("spark.hadoop.mapreduce.fileoutputcommitter.cleanup-failures.ignored", true)
    .config("spark.hadoop.parquet.enable.summary-metadata", false)
    .config("spark.sql.parquet.mergeSchema", false)
    .config("spark.sql.parquet.filterPushdown", true) // for reading purpose 
    .config("mapreduce.fileoutputcommitter.algorithm.version", "2")
    .config("spark.sql.parquet.compression.codec", "snappy")
    .getOrCreate()
    
    
      .config("spark.hadoop.fs.s3a.fast.upload","true")
      .config("spark.hadoop.fs.s3a.fast.upload","true")
      .config("spark.hadoop.fs.s3a.connection.timeout","100000")
      .config("spark.hadoop.fs.s3a.attempts.maximum","10")
      .config("spark.hadoop.fs.s3a.fast.upload","true")
      .config("spark.hadoop.fs.s3a.fast.upload.buffer","bytebuffer")
      .config("spark.hadoop.fs.s3a.fast.upload.active.blocks","4")
      .config("fs.s3a.connection.ssl.enabled", "true")