我只是试图将文本文件读取到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.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)
的句法糖。