【问题标题】: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 都在工作。我们可以盲目使用任何一种吗?
【问题讨论】:
标签:
python
csv
apache-spark
pyspark
apache-spark-sql
【解决方案1】:
2 和 3 是等价的。
3 允许额外的option(key, value) 函数(参见4 或spark.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 以防止字符串值出现拼写错误
【解决方案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。