使用PySpark在Elasticsearch中保存数据

时间:2019-02-08 03:11:57

标签: apache-spark elasticsearch pyspark

我有一个采用数据框并将其保存到Elasticsearch中的程序。保存数据框时的外观如下:

    model_df.write.format(
        "org.elasticsearch.spark.sql"
    ).option(
        "pushdown", True
    ).option(
        "es.nodes", "example.server:9200"
    ).option("es.index.auto.create", True
    ).mode('append').save("EPTestIndex/")

运行程序时,出现此错误:

  

py4j.protocol.Py4JJavaError:调用o96.save时发生错误。   :java.lang.ClassNotFoundException:找不到数据源:   org.elasticsearch.spark.sql。请在以下位置找到软件包   http://spark.apache.org/third-party-projects.html

我做了一些研究,认为我需要一个罐子,所以我将这些配置添加到了SparkSession

spark = SparkSession.builder.config("jars", "/Users/public/ProjectDirectory/lib/elasticsearch-spark-20_2.11-6.0.1.jar")\
    .getOrCreate()
sqlContext = SQLContext(spark)

我在main中初始化SparkSession并在另一个包中写入ES。程序包获取数据帧并运行上面的write命令。但是,即使如此,我仍然得到相同的ClassNotFoundExceptioin可能是什么问题?

我正在PyCharm中运行此程序,如何制作它以便PyCharm能够运行它?

1 个答案:

答案 0 :(得分:0)

Elasticsearch公开了JSON API,而pandas数据框不是JSON支持的类型。

如果必须插入它,则可以使用dataframe.to_json()

序列化数据帧