【问题标题】:如何更改 pyspark aws-glue 中的架构?
【发布时间】:2022-01-23 16:04:14
【问题描述】:

我对 pyspark 中的架构有疑问。我正在尝试使用胶水动态框架从 MongoDB 中读取完整的集合。

    read_mongo_options = {
   "uri": mongo_uri,
   "database": "database",
   "collection": collection,
   "ssl": "true",
   "username": "user",
   "password": "password",
   "sampleSize": "200000",
   "partitioner": "MongoSamplePartitioner",
   "partitionerOptions.partitionSizeMB": "10",
   "partitionerOptions.partitionKey": "_id"

}
datasource0 = glueContext.create_dynamic_frame.from_options(connection_type="mongodb",                   
                                                          connection_options=read_mongo_options,transformation_ctx = "datasource0")
df=datasource0.toDF()

我认为它无法解释在同一字段中具有不同值的模式。 这是一个示例中的 defaultPaymentsource 的值;

  "defaultPaymentsource": {
    "$oid": "58f0933bXXXXXXXXXX"
  },

在其他文档中,该字段不再存在 推断架构后,结果如下:

当我尝试保存或显示结果时,出现以下错误

Cannot cast UNDEFINED into a StructType(StructField(oid,StringType,true))

我已将 samplesize 的值设置为最大值,并通过删除对“未定义”的引用更改了架构,但结果始终相同。 有什么想法吗?

【问题讨论】:

    标签: python mongodb pyspark aws-glue aws-glue-spark


    【解决方案1】:

    嗯,现在可以了。

    删除列并创建 ney df

        df_no_p=DropFields.apply(a, paths=['defaultPaymentsource.undefined'])
        schema2=df_no_p.toDF().schema
        df = spark.read.format("mongo").load(schema=schema2)
    

    【讨论】:

      猜你喜欢
      • 2021-09-13
      • 1970-01-01
      • 2018-07-20
      • 2022-08-20
      • 1970-01-01
      • 2022-08-02
      • 1970-01-01
      • 1970-01-01
      • 2020-02-04
      相关资源
      最近更新 更多