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

时间:2017-04-05 10:10:46

标签: mongodb casting pyspark objectid

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

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

df有一个列'_id',但是当我运行它时,我会使用相同的_id获取MongoDB中的文档,一个类型为'String',另一个类型为'ObjectId'。有没有办法在我的数据框中更改列_id的类型?我发现类型应该是StructType:{oid:String}但我不知道如何改变它。

由于

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

尝试在创建它时使用特定架构。 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)