spark中不同读取选项之间的区别是什么?

时间:2018-07-02 07:05:38

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

我正在通过以下代码读取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都在工作。我们可以盲目使用任何一个吗?

2 个答案:

答案 0 :(得分:3)

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防止在字符串值中输入错误

答案 1 :(得分:1)

2是3的同盟国。 1默认情况下读取实木复合地板文件。

例如: spark.read.csv()只会调用.format(“ csv”)。load(“ path”)

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

使用哪一个都没关系。(2,3,4)正如我所说的,默认情况下1个读取实木复合地板。