Я использую коннектор Apache Spark для Azure Cosmos DB для хранения фрейма данных в scala на CosmosDB.Это работает, но есть странная вещь с порядком элементов в документе, который хранится.
import org.apache.spark.sql.types._
val schema = new StructType()
.add("a", StringType, true)
.add("b", StringType, true)
.add("c",
new StructType()
.add("d", StringType, true)
.add("e", StringType, true)
.add("f", StringType, true)
)
val dataDS = Seq("""
{
"a": "a",
"b": "b",
"c": {
"d": "d",
"e": "e",
"f": "f"
}
}""").toDS()
val df = spark.read.schema(schema).json(dataDS)
println(df.printSchema())
df.write.mode(SaveMode.Overwrite).cosmosDB(writeConfig)
создает этот документ в CosmosDB
{
"a": "a",
"b": "b",
"c": {
"d": "d",
"e": "e",
"f": "f"
},
"id": "7c2ef8b9-86a6-4aa3-b190-d5083c885ea8",
"_rid": .....
}
, в то время как этот код
import org.apache.spark.sql.types._
val schema = new StructType()
.add("a", StringType, true)
.add("beta", StringType, true) <<-----
.add("c",
new StructType()
.add("d", StringType, true)
.add("echo", StringType, true) . <<-----
.add("f", StringType, true)
)
val dataDS = Seq("""
{
"a": "a",
"beta": "b", <<-----
"c": {
"d": "d",
"echo": "e", <<-----
"f": "f"
}
}""").toDS()
val df = spark.read.schema(schema).json(dataDS)
println(df.printSchema())
df.write.mode(SaveMode.Overwrite).cosmosDB(writeConfig)
создает этот документ в CosmosDB
{
"a": "a",
"c": {
"d": "d",
"f": "f",
"echo": "e" <<-----
},
"id": "509c6c94-139a-4b73-a2dc-1ff424519adb",
"beta": "b", <<-----
"_rid": .....
}
ПочемуЭто так, что порядок элементов изменен в двух примерах.Я хочу, чтобы структура документа была такой же, как в первом примере.Я не уверен, почему изменение e-> echo и b-> beta изменяет структуру документа в CosmosDB.
Кто-нибудь имеет представление о том, почему это происходит и что можно сделать, чтобы решить эту проблему?