我只是尝试将文本文件读入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。
我不清楚何时使用这些中的哪一个。这些之间有明显的区别吗?
答案 0 :(得分:3)
为什么sqlContext.read.load和sqlContext.read.text之间有区别?
uri = "mongodb://usernamen:password@host:port/admin"
conn = pymongo.MongoClient(uri)
db = conn['admin']
db_stats = db.command({'replSetGetStatus' :1})
primary_optime = 0
secondary_optime = 0
for key in db_stats['members'] :
if key['stateStr'] == 'SECONDARY' :
secondary_optime = key['optimeDate']
if key['stateStr'] == 'PRIMARY' :
primary_optime =key['optimeDate']
print 'primary_optime : ' + str(primary_optime)
print 'secondary_optime : ' + str(secondary_optime)
seconds_lag = (primary_optime - secondary_optime ).total_seconds()
#total_seconds() userd to get the lag in seconds rather than datetime object
print 'secondary_lag : ' + str(seconds_lag)
假设sqlContext.read.load
为数据源格式,parquet
采用sqlContext.read.text
格式。
使用text
,您可以使用sqlContext.read.load
参数定义数据源格式。
根据Spark 1.6 与 2.x 的版本,您可能加载或不加载外部Spark包以支持 csv 格式。
从Spark 2.0开始,您不再需要加载spark-csv Spark包(引用official documentation):
注意:此功能已在Apache Spark 2.x中内联。此软件包处于维护模式,我们只接受关键的错误修复。
这可以解释为什么你感到困惑,因为你可能一直在使用Spark 1.6.x并且没有加载Spark包以获得format
支持。
当现在,我对此感到困惑,因为我在网上看到的所有资源都说使用
csv
包括这个:https://spark.apache.org/docs/1.6.1/sql-programming-guide.html。
sqlContext.read.load
Spark包不是Spark的一部分时,https://spark.apache.org/docs/1.6.1/sql-programming-guide.html适用于Spark 1.6.1。它发生在Spark 2.0中。
我不清楚何时使用这些中的哪一个。这些之间有明显的区别吗?
实际上 iff 没有使用Spark 2.x。
如果您使用Spark 1.6.x,则spark-csv
必须使用spark-csv
选项单独加载(如Using with Spark shell中所述):
可以使用
--packages
命令行选项将此包添加到Spark。例如,在启动火花壳时包含它
事实上,您仍然可以在Spark 2.x中明确使用--packages
格式,因为它已在内部得到认可。
答案 1 :(得分: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
命令的参数。
除此之外sqlContext.read.formatName(...)
是sqlContext.read.format("formatName")
和sqlContext.read.load(..., format=formatName)
的语法糖。