PySpark 数据框 - 将类型更改为 ObjectId

PySpark dataframe - change type to ObjectId

我正在使用 spark-mongo 连接器通过 Pyspark 写入 MongoDB。 我想用这个命令编辑一些文档

df.write.format("com.mongodb.spark.sql.DefaultSource").options(uri=uri, collection="test").mode("append").save()

df 有一列 '_id' 但是当我 运行 然后我在 MongoDB 中得到两个具有相同 _id 的文档,一个类型为 'String',另一个类型为 'String'输入 'ObjectId'。有没有办法更改我的数据框中 _id 列的类型?我发现类型应该是 StructType: { oid: String } 但我不知道如何更改它。

谢谢

我的问题是我的集合中实际上有一些文档带有 _id 字符串,而其他文档带有 _id ObjectId,所以当我用 Spark 加载它时,它推断该字段的类型是字符串。

您应该尝试在您的数据框上强制输入。

尝试使用特定的架构来创建它。 SQLContext - CreateDataFrame

from pyspark.sql.types import *
schema = StructType([
    StructField('_id', StringType(), True),
    StructField('published', StringType(), True),
    ...
])
...
df =sql_context.createDataFrame(json_events, schema=schema)