我有一个采用数据框并将其保存到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能够运行它?
答案 0 :(得分:0)
Elasticsearch公开了JSON API,而pandas数据框不是JSON支持的类型。
如果必须插入它,则可以使用dataframe.to_json()