为什么sqlcontext.read..load和sqlcontext.read.text之间有区别



我只是试图将文本文件读取到pyspark rdd中,我注意到sqlContext.read.loadsqlContext.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.6.1/sql-programming-guide.html。

我何时使用哪一个在我什么时候使用。这些之间有明确的区别吗?

为什么sqlcontext.read..load和sqlcontext.read.text?

之间有区别

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

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


取决于Spark 1.6 vs 2.x 您可能会或可能不会加载外部火花包来支持 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.6.1/sql-programpramming-guide.html。

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


我何时使用哪一个在我什么时候使用。这些之间有明确的区别吗?

实际上没有 iff 您使用Spark2.x。

但是,如果您使用Spark 1.6.x,则必须使用--packages选项将spark-csv分别加载(如使用Spark Shell所述):

可以使用--packages命令行选项添加此软件包以火花。例如,在开始火花壳

时包括它

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

区别是:

  • 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命令参数。

超越sqlContext.read.formatName(...)sqlContext.read.format("formatName")sqlContext.read.load(..., format=formatName)的句法糖。

相关内容

  • 没有找到相关文章

最新更新