pyspark:使用spark.read.format("csv")和spark.read.csv读取CSV文件的性能差异

4

有人知道spark.read.format("csv")和spark.read.csv之间的区别吗?

有些人说"spark.read.csv"是"spark.read.format("csv")"的别名,但我发现这两者之间存在差异。我进行了一次实验,在一个新的pyspark会话中执行了下面的每个命令,以便没有缓存。

DF1花费了42秒,而DF2只花费了10秒。csv文件大小为60+GB。

DF1 = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load("hdfs://bda-ns/user/project/xxx.csv")

DF2 = spark.read.option("header", "true").csv("hdfs://bda-ns/user/project/xxx.csv")

我挖掘这个问题的原因是因为我需要在过滤后对两个数据框执行联合操作,然后将其写回到HDFS中,但写入时间非常长(16小时后仍在写入...)。
1个回答

7
基本上,当你调用它们中的一个时,它们是完全相同的。 但是在你的实现中有所不同。
使用DF1时,添加inferSchema选项会减慢进程速度,这就解释了为什么DF1花费的时间比第二个要长。
inferSchema:自动推断列类型。 它需要对数据进行额外的一遍扫描,默认情况下为false。详细文档请参见详细文档

有人能帮我解决问题吗?在什么情况下应该使用spark.read.csv("path")和spark.read.format("csv").load("path")? - Gopesh
4
它们非常相似,但是想象一下,如果你想根据逻辑加载不同的文件格式,使用spark.read.format("csv" if SOMETHING else "ORC").load("path")会更易读,而不是使用if else来调用spark.read.csv("path") - Duy Nguyen
@DuyNguyen 如果infer_schema默认为false,但我们没有传递模式,它会如何猜测模式? - Eugenio.Gastelum96

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接