5

我只是想将文本文件读入 pyspark RDD,我注意到sqlContext.read.load和之间存在巨大差异sqlContext.read.text

s3_single_file_inpath='s3a://bucket-name/file_name'

indata = sqlContext.read.load(s3_single_file_inpath, format='com.databricks.spark.csv', header='true', inferSchema='false',sep=',')
indata = sqlContext.read.text(s3_single_file_inpath)

上面的sqlContext.read.load命令失败了

Py4JJavaError: An error occurred while calling o227.load.
: java.lang.ClassNotFoundException: Failed to find data source: com.databricks.spark.csv. Please find packages at http://spark-packages.org

但是第二个成功了吗?

现在,我对此感到困惑,因为我在网上看到的所有资源都说要使用,sqlContext.read.load包括这个:https ://spark.apache.org/docs/1.6.1/sql-programming-guide.html 。

我不清楚何时使用这些中的哪一个。这些之间有明确的区别吗?

4

2 回答 2

4

为什么 sqlContext.read.load 和 sqlContext.read.text 有区别?

sqlContext.read.load假定parquet为数据源格式,而sqlContext.read.text假定text格式。

您可以使用参数sqlContext.read.load定义数据源格式。format


根据 Spark 1.62.x的版本,您可能会也可能不会加载外部 Spark 包以支持csv格式。

从 Spark 2.0 开始,您不再需要加载spark-csv Spark 包,因为(引用官方文档):

注意:此功能已在 Apache Spark 2.x 中内联。此软件包处于维护模式,我们只接受关键错误修复。

这可以解释为什么您会感到困惑,因为您可能一直在使用 Spark 1.6.x 并且没有加载 Spark 包以获得csv支持。

现在,我对此感到困惑,因为我在网上看到的所有资源都说要使用,sqlContext.read.load包括这个:https ://spark.apache.org/docs/1.6.1/sql-programming-guide.html 。

spark-csv当Spark 包不是 Spark 的一部分时, https ://spark.apache.org/docs/1.6.1/sql-programming-guide.html 适用于 Spark 1.6.1 。它发生在 Spark 2.0 中。


我不清楚何时使用这些中的哪一个。这些之间有明确的区别吗?

如果您使用 Spark 2.x,则实际上没有。

但是,如果您使用 Spark 1.6.x,spark-csv则必须使用选项单独加载--packages(如使用 Spark shell中所述):

--packages可以使用命令行选项将此包添加到 Spark 。例如,在启动 spark shell 时包含它


事实上,您仍然可以com.databricks.spark.csv在 Spark 2.x 中显式使用格式,因为它在内部被识别。

于 2017-12-05T07:48:25.687 回答
2

区别在于:

  • text是 Spark 1.6 中的内置输入格式
  • com.databricks.spark.csv是 Spark 1.6 中的第三方包

要使用第三方 Spark CSV(Spark 2.0 不再需要),您必须按照spark-csv现场说明进行操作,例如提供

 --packages com.databricks:spark-csv_2.10:1.5.0  

spark-submit/pyspark命令的参数。

除此之外是andsqlContext.read.formatName(...)的语法糖。sqlContext.read.format("formatName")sqlContext.read.load(..., format=formatName)

于 2017-12-05T02:17:50.817 回答