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

sim*_*ple 5 apache-spark apache-spark-sql pyspark spark-csv

我只是想将文本文件读入 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)
Run Code Online (Sandbox Code Playgroud)

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

但是第二个成功了吗?

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

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

hi-*_*zir 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  
Run Code Online (Sandbox Code Playgroud)

spark-submit带有/命令的参数pyspark

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