我在使用Spark时遇到了一个非常简单的问题,但是网络上的信息非常少。我在使用Pyspark和Scala时都遇到过这个问题。
问题是保存csv / hive文件需要花费大量时间。
下面是我的一段非常简单的代码。
spark = SparkSession.
sql = '''
select * from some_table
'''
df = spark.sql(sql)
df.write.csv(path)
这段代码非常简单,但是处理200,000个数据卷需要30-40分钟,处理1000万个数据卷需要几个小时。即使repartition(1)
也不能显著提高写性能。saveAsTable
(对Hive)可能会更好,但仍然是一个不可接受的时间量,毕竟,直接使用Hive要快得多。2但是Hive作为一个大项目很难进行工程设计。
我的问题是:
1.是否有办法提高性能?
1.性能基准是什么?在什么配置中存储100万条数据大约需要多长时间?
2条答案
按热度按时间waxmsbnn1#
它不是行数。它也是列数和数据数。如果以GB为单位的表主要决定转储时间,那么大小是多少。你可以使用下面的命令来获得该信息。
现在,一旦知道了GB,就可以估计转储时间。如果太高,数据转储将花费时间,可以使用
1.添加一些过滤器以排除不需要的数据。
1.仅选择必需的列。
1.在夜间系统不忙碌时转储数据。
1.请与最终消费者核实,看是否可以调整它。
您可以尝试使用此命令将数据转储到csv文件中-它既简单又快速。
bjp0bcyl2#
我知道这个问题已经很老了,但是经过几次反复试验,我的团队发现,当我们向Csv写入数据时,我们需要确保根据所需的并行性对数据进行重新分区。例如: