【问题标题】: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()

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

  1. df = spark.read.load("/..../xyz.csv")
  2. df = spark.read.csv("/..../xyz.csv")
  3. df = spark.read.format('csv').load("/..../xyz.csv")
  4. df = spark.read.option().csv("/..../xyz.csv")

我应该使用哪个选项?

编辑:-

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

【问题讨论】:

    标签: python csv apache-spark pyspark apache-spark-sql


    【解决方案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。

    【讨论】:

      猜你喜欢
      • 2019-07-07
      • 2014-09-20
      • 1970-01-01
      • 2010-09-23
      • 2012-04-28
      • 2016-05-14
      • 2010-12-28
      • 2021-08-08
      • 1970-01-01
      相关资源
      最近更新 更多