首页 > 解决方案 > 有什么方法可以与 Pyspark 一起使用来将 MongoDB 集合作为 RDD 而不是作为数据帧读取?

问题描述

我使用 Pyspark 访问 Mongo。我的任务很简单:将 Mongo 导出到 hdfs。这是我的代码:

spark = SparkSession \
    .builder.appName("Mongodb-Exporter") \
    .config("spark.mongodb.input.uri", "xxx") \
    .config("spark.mongodb.input.database","xx") \
    .config("spark.mongodb.input.collection","xx") \
    .getOrCreate()

df = spark.read.format("com.mongodb.spark.sql.DefaultSource").load()
df.write.format("json").save(sys.argv[1])
spark.stop()

在我遇到这个问题之前,一切都运行良好:

com.mongodb.spark.exceptions.MongoTypeConversionException: 
 Cannot cast STRING into a ArrayType(StringType,true) (value: BsonString{value=''})

发生这种情况是因为我的集合有一个具有多种值的字段,例如

document1:{"name":"ross"};
document2:{"name":["joey","monica"]}

我感到很困惑。有什么方法可以阅读 Mongo 并返回 RDD?我不想要数据框,我不在乎它的架构,但似乎数据框很在意。

PS:我知道 Java 或 Scala 可以做到这一点,但我应该如何使用 Pyspark?我是StackOverflow的新手,希望有人能帮助我,谢谢!

标签: mongodbapache-sparkpyspark

解决方案


推荐阅读