PySpark dataframe - измените тип на ObjectId

Я пишу в MongoDB с помощью Pyspark, используя соединитель spark-mongo. Я хочу отредактировать некоторые документы с помощью этой команды

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

df имеет столбец _id, но когда я его запускаю, я получаю два документа в MongoDB с одинаковым _id, один с типом String, а другой с типом ObjectId. Есть ли способ изменить тип столбца _id в моем фрейме данных? Я обнаружил, что тип должен быть StructType: {oid: String}, но я не знаю, как это изменить.

Спасибо


person Pierre    schedule 05.04.2017    source источник


Ответы (2)


Моя проблема в том, что у меня действительно были некоторые документы со строкой _id и другие с _id ObjectId в моей коллекции, поэтому, когда я загружал их с помощью Spark, он предполагал, что тип этого поля был строкой.

person Pierre    schedule 06.04.2017

Вы должны попытаться принудительно ввести тип в свой фреймворк.

Попробуйте использовать определенную схему при ее создании. 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)
person Franzi    schedule 06.04.2017