Столбцы Dataframe не сохраняют порядок, а столбцы с нулевыми значениями исключаются при записи в CosmosDB Collection. - PullRequest
0 голосов
/ 20 октября 2019

Я попытался скопировать данные в коллекцию cosmosDB с фрейма данных в искре. Данные записываются в cosmosDB, но с двумя проблемами.

  1. Порядок столбцов в кадре данных не поддерживается в cosmosDB.
  2. Столбцы с нулевыми значениями не записываются в cosmosDB, ониполностью исключены.

Ниже приведены данные, доступные в фрейме данных:

+-------+------+--------+---------+---------+-------+
| NUM_ID|  TIME|    SIG1|     SIG2|     SIG3|   SIG4|
+-------+------+--------+---------+---------+-------+
|X00030 | 13000|35.79893| 139.9061| 48.32786|   null|
|X00095 | 75000|    null|     null|     null|5860505|
|X00074 | 43000|    null|  8.75037|  98.9562|8014505|

Ниже приведен код, написанный на искре для копирования фрейма данных в cosmosDB.

val finalSignals = spark.sql("""SELECT * FROM db.tableName""")
val toCosmosDF = finalSignals.withColumn("NUM_ID", trim(col("NUM_ID"))).withColumn("SIG1", round(col("SIG1"),5)).select("NUM_ID","TIME","SIG1","SIG2","SIG3","SIG4")

//write DF into COSMOSDB

import com.microsoft.azure.cosmosdb.spark.config.Config
import org.apache.spark.sql.SaveMode
import com.microsoft.azure.cosmosdb.spark.schema._
import com.microsoft.azure.cosmosdb.spark._

val writeConfig = Config(Map(
      "Endpoint" -> "xxxxxxxx",
      "Masterkey" -> "xxxxxxxxxxx",
      "Database" -> "xxxxxxxxx",
      "Collection" -> "xxxxxxxxx",
      "preferredRegions" -> "xxxxxxxxx",
      "Upsert" -> "true"
    ))

toCosmosDF.write.mode(SaveMode.Append).cosmosDB(writeConfig)

Ниже приведены данные, записанные в cosmosDB.


    "SIG3": 48.32786,
    "SIG2": 139.9061,
    "TIME": 13000,
    "NUM_ID": "X00030",
    "id": "xxxxxxxxxxxx2a",
    "SIG1": 35.79893,
    "_rid": "xxxxxxxxxxxx",
    "_self": "xxxxxxxxxxxxxxxxxx",
    "_etag": "\"xxxxxxxxxxxxxxxx\"",
    "_attachments": "attachments/",
    "_ts": 1571390120
}

{
    "TIME": 75000,
    "NUM_ID": "X00095",
    "id": "xxxxxxxxxxxx2a",
    "_rid": "xxxxxxxxxxxx",
    "SIG4": 5860505,
    "_self": "xxxxxxxxxxxxxxxxxx",
    "_etag": "\"xxxxxxxxxxxxxxxx\"",
    "_attachments": "attachments/",
    "_ts": 1571390120
}

{
    "SIG3": 98.9562,
    "SIG2": 8.75037,
    "TIME": 43000,
    "NUM_ID": "X00074",
    "id": "xxxxxxxxxxxx2a",
    "SIG4": 8014505,
    "_rid": "xxxxxxxxxxxx",
    "_self": "xxxxxxxxxxxxxxxxxx",
    "_etag": "\"xxxxxxxxxxxxxxxx\"",
    "_attachments": "attachments/",
    "_ts": 1571390120
}
  1. Запись для столбцов с нулем в кадре данных отсутствует в документе cosmosDB.
  2. Данные, записанные в cosmosDB, не являютсяимея порядок столбцов, который есть в фрейме данных.

Как решить эти две проблемы?

...