如何使用pyspark在mongodb中保存数据帧?

时间:2019-01-12 07:57:32

标签: mongodb dataframe pyspark

my_spark = SparkSession \ .builder \ .appName("DGLE") \ 
 config("spark.mongodb.input.uri", "mongodb://127.0.0.1/local.DGLE") \ getOrCreate() 
JDBC.write.format("com.mongodb.spark.sql.DefaultSource").option("spark.mongodb.output.uri", "mongodb://127.0.0.1:27017/local.DGLE").save() 

这是我的代码,不知道错误在哪里,是什么,请帮忙

my_spark = SparkSession \ builder \ .appName("DGLE") \ .config("spark.mongodb.input.uri", "mongodb://127.0.0.1/local.DGLE") \ .getOrCreate() 
JDBC.write.format("com.mongodb.spark.sql.DefaultSource").option("spark.mongodb.output.uri", "mongodb://127.0.0.1:27017/local.DGLE").save()

2 个答案:

答案 0 :(得分:0)

从pyspark写入mongodb的有效方法是使用MongoDB Spark Connector。连接器会将数据转换为BSON格式,并将其保存到mongodb。假设您有一个要保存在mongodb中的名为df的spark数据框。您可以尝试:

from pyspark.sql import SparkSession, SQLContext
from pyspark import SparkConf, SparkContext
sc = SparkContext()
spark = SparkSession(sc)   


df.write.format("com.mongodb.spark.sql.DefaultSource").mode("append").option("spark.mongodb.output.uri","mongodb://username:password@server_details:27017/db_name.collection_name?authSource=admin").save()

如果您使用的是笔记本,请在顶部写上这个

%%configure
{"conf": {"spark.jars.packages": "org.mongodb.spark:mongo-spark-connector_2.11:2.3.2"}}

如果您使用的是spark-submit命令:

spark-submit --conf spark.pyspark.python=/usr/bin/anaconda/envs/py35/bin/python3.5 --packages org.mongodb.spark:mongo-spark-connector_2.11:2.3.1 file_name.py

答案 1 :(得分:0)

def save(message: DataFrame):
    message.write \
        .format("mongo") \
        .mode("append") \
        .option("database", "db_name") \
        .option("collection", "collection_name") \
        .save()
    pass

这就是 SparkSession 的样子

spark: SparkSession = SparkSession \
    .builder \
    .appName("MyApp") \
    .config("spark.mongodb.input.uri", "mongodb://localhost:27017") \
    .config("spark.mongodb.output.uri", "mongodb://localhost:27017") \
    .config("spark.jars.packages", "org.mongodb.spark:mongo-spark-connector_2.12:3.0.1") \
    .master("local") \
    .getOrCreate()