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

use*_*601 1 python csv apache-spark apache-spark-sql pyspark

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

    from pyspark.sql import SparkSession
    spark = SparkSession.builder \
            .master("local[2]") \
            .getOrCreate()
Run Code Online (Sandbox Code Playgroud)

现在有四种不同的阅读选项:

  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正在工作。我们可以盲目使用任何一种吗?

cri*_*007 5

2并且3是等价的。

3例如,允许使用附加option(key, value) 功能(请参阅4spark.read.format('csv').option(...).load()),该功能可以让您跳过标题行,或设置逗号以外的分隔符。

1不解析 CSV,它使用 Parquet 作为默认格式

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 
Run Code Online (Sandbox Code Playgroud)

我建议inferSchema=True防止字符串值中的拼写错误


M. *_*dru 5

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

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

  @scala.annotation.varargs
  def csv(paths: String*): DataFrame = format("csv").load(paths : _*)
Run Code Online (Sandbox Code Playgroud)

您使用哪一种并不重要。(2,3,4) 正如我所说,1 默认情况下读取镶木地板。