azure - Spark Cosmos db 连接器正在删除大多数行为空的列
问题描述
我正在尝试使用以下代码使用 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 ”列包含在我的最终数据框中。
解决方案
当读取时不指定 schema 时,Spark Connector 需要对其进行推断。为了推断它,它对文档进行采样并基于它们创建模式。
问题可能是采样的文档没有这个属性(你说30K上只有2个有),所以生成schema读取完整数据时,显然没有。
直接在读取调用上提供模式将解决此问题。或者,您可以自定义采样大小(参考https://github.com/Azure/azure-cosmosdb-spark/blob/19561f0d42eaa91f9e4793fbdf30b62b22829868/src/main/scala/com/microsoft/azure/cosmosdb/spark/config/CosmosDBConfig。 scala#L47 , 默认 1000) 通过增加schema_samplesize
.
推荐阅读
- java - 将变量从一个类传递到另一个类
- javascript - FlowJS - 数字......与字符串不兼容
- reactjs - 为什么我们不需要在 React 中绑定箭头函数?
- bash - docker run 不在 /etc/profile.d/ 中运行我的脚本
- r - R中的面板数据处理
- xamarin - 在 Xamarin 中捕获后显示图像
- c# - “找不到编码 1252 的数据” iTextSharp 使用日文字体
- python - 升级到 macOS Mojave 后出现编译错误 | 致命错误:limits.h:没有这样的文件或目录
- floating-point - PROLOG - 如何舍入浮点数的小数?
- javascript - npm WARN checkPermissions 缺少对 /usr/local/lib/node_modules 的写入权限