在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()吗?
答案 0 :(得分:1)
esRDD
中不存在 pyspark
。
因此它只适用于spark scala ,您需要导入以下内容:
import org.apache.spark.SparkContext._
import org.elasticsearch.spark._
现在您可以阅读数据:
val rdd = sc.esRDD("index_name/doc_type")