spark中不同的读取选项有啥区别?

Posted

技术标签:

【中文标题】spark中不同的读取选项有啥区别?【英文标题】:What is the diffence between different read options in spark?spark中不同的读取选项有什么区别? 【发布时间】:2018-07-02 07:05:37 【问题描述】:

我正在通过以下代码读取 csv 文件:-

    from pyspark.sql import SparkSession
    spark = SparkSession.builder \
            .master("local[2]") \
            .getOrCreate()

现在有四个不同的选项可供阅读:

    df = spark.read.load("/..../xyz.csv") df = spark.read.csv("/..../xyz.csv") df = spark.read.format('csv').load("/..../xyz.csv") df = spark.read.option().csv("/..../xyz.csv")

我应该使用哪个选项?

编辑:-

另外,inferSchema="true"inferSchema=True 都在工作。我们可以盲目使用任何一种吗?

【问题讨论】:

【参考方案1】:

23 是等价的。

3 允许额外的option(key, value) 函数(参见4spark.read.format('csv').option(...).load()),例如,它可以让您跳过标题行,或设置逗号以外的分隔符。

1 不解析 CSV,it uses Parquet as the default format。

def load(self, path=None, format=None, schema=None, **options):
        """Loads data from a data source and returns it as a :class`DataFrame`.

        :param path: optional string or a list of string for file-system backed data sources.
        :param format: optional string for format of the data source. Default to 'parquet'.
        :param schema: optional :class:`pyspark.sql.types.StructType` for the input schema
                       or a DDL-formatted string (For example ``col0 INT, col1 DOUBLE``).
        :param options: all other string options 

我建议inferSchema=True 以防止字符串值出现拼写错误

【讨论】:

谢谢@cricket_007!【参考方案2】:

2 是 3 的别名。 1 默认读取 parquet 文件。

例如: spark.read.csv() 只是调用 .format("csv").load("path")

  @scala.annotation.varargs
  def csv(paths: String*): DataFrame = format("csv").load(paths : _*)

不管你用的是哪一个。(2,3,4) 正如我所说的 1 默认读取 parquet。

【讨论】:

以上是关于spark中不同的读取选项有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

Spark ML 和 MLLIB 包有啥区别

Spark 中用 Scala 和 java 开发有啥区别

hadoop和spark的都是并行计算,有啥相同和区别?

spark中partitionBy和groupBy有啥区别

PySpark 和 Spark 有啥区别?

Spark中RDD和Dataframe有啥区别