【问题标题】:Spark Cosmos db connector is dropping columns where majority of rows are nullSpark Cosmos db 连接器正在删除大多数行为空的列
【发布时间】:2021-05-22 01:55:19
【问题描述】:

我正在尝试使用 spark cosmos 连接器从 cosmos db 读取 30K 行数据,使用以下命令 代码

val readConfig = Config(Map(
  "Endpoint" -> "",
  "Masterkey" -> "",
  "Database" -> "",
  "Collection" -> "",
  "PreferredRegions" -> "",
   "query_custom" -> """SELECT t.id,t.gender,t.loc from Tab t"""
 ))

val df = spark.read.cosmosDB(readConfig)

在 30k 中,只有 2 行的 'loc' 列具有非空值。但由于某种原因,连接器在最终数据框中完全删除了“loc”列,最终数据框给出了以下架构

df.printSchema
root
 |-- id: string (nullable = true)
 |-- gender: string (nullable = true)

有人可以帮我如何将“loc”列包含在我的最终数据框中。

【问题讨论】:

  • Spark 版本?
  • Spark 版本为 2.4

标签: azure apache-spark azure-cosmosdb azure-databricks


【解决方案1】:

读取时不指定schema时,Spark Connector需要进行推断。为了推断它,它对文档进行采样并基于它们创建架构。

问题可能是采样文档没有这个属性(你说30K上只有2个有),所以生成schema读取完整数据时,显然没有。

直接在读取调用上提供架构可以解决这个问题。或者,您可以通过增加schema_samplesize 来自定义采样大小(参考https://github.com/Azure/azure-cosmosdb-spark/blob/19561f0d42eaa91f9e4793fbdf30b62b22829868/src/main/scala/com/microsoft/azure/cosmosdb/spark/config/CosmosDBConfig.scala#L47,默认1000)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 2022-07-18
    • 1970-01-01
    • 2018-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多