SparkContext对象没有属性esRDD(elasticsearch-spark连接器)

时间:2017-02-04 12:09:39

标签: apache-spark elasticsearch pyspark

在spark-shell中,我成功使用了elasticsearch-hadoop连接器(特别是为spark开发的连接器:elasticsearch-spark-20_2.11-5.1.2.jar)。调用spark:

] $SPARK_HOME/bin/spark-shell --master local[2] --jars ~/spark/jars/elasticsearch-spark-20_2.11-5.1.2.jar

在scala shell中:

scala> import org.elasticsearch.spark._
scala> val es_rdd = sc.esRDD("myindex/mytype",query="myquery")

完美无缺。我想和pyspark做同样的事情。我试过了:

] $SPARK_HOME/bin/pyspark --master local[2] --driver-class-path=/home/pat/spark/jars/elasticsearch-spark-20_2.11-5.1.2.jar

但是在python shell中,不可能调用esRDD方法:

>>> sc.esRDD
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  AttributeError: 'SparkContext' object has no attribute 'esRDD'

加载了jar库,因为此调用有效:

>>> conf = {"es.resource" : "myindex/mytype", "es.nodes" : "localhost"}
>>> rdd = sc.newAPIHadoopRDD("org.elasticsearch.hadoop.mr.EsInputFormat","org.apache.hadoop.io.NullWritable","org.elasticsearch.hadoop.mr.LinkedMapWritable", conf=conf)

有人知道如何在pyspark中使用esRDD()吗?

1 个答案:

答案 0 :(得分:1)

实际上esRDD中不存在

pyspark

因此它只适用于spark scala ,您需要导入以下内容:

import org.apache.spark.SparkContext._

import org.elasticsearch.spark._ 

现在您可以阅读数据:

val rdd = sc.esRDD("index_name/doc_type")