как я могу разобрать файл json и описать схему в Azure Databricks - PullRequest
0 голосов
/ 16 января 2020

У меня есть схема, которую нужно взорвать, но после того, как я собрал свою схему и прочитал ее, столбец (массив) становится пустым. имя столбца "TimeEntries". ниже приведена схема столбца, и мне нужно ее взорвать.

|-- TimeEntries: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- AgentId: string (nullable = true)----------
 |    |    |-- ApprovalDetails: struct (nullable = true)
 |    |    |    |-- ActualApprovedDateTimeInfo: struct (nullable = true)
 |    |    |    |    |-- DateTimeInUtc: string (nullable = true)-------------
 |    |    |    |    |-- TimezoneId: string (nullable = true)
 |    |    |    |-- ApprovedRejectedByAlias: string (nullable = true)
 |    |    |    |-- AssignedApproverAlias: string (nullable = true)
 |    |    |    |-- RejectionComments: string (nullable = true)
 |    |    |    |-- RejectionReasonId: string (nullable = true)
 |    |    |    |-- RequiredApprovedDateTimeInfo: struct (nullable = true)
 |    |    |    |    |-- DateTimeInUtc: string (nullable = true)
 |    |    |-- LaborCategory: string (nullable = true)--------
 |    |    |-- LaborDate: string (nullable = true)--------
 |    |    |-- LaborHours: string (nullable = true)----------
 |    |    |-- LaborId: string (nullable = true)-----
 |    |    |-- LaborStatus: string (nullable = true)-------
 |    |    |-- Notes: string (nullable = true)----
 |    |    |-- PartnerLaborId: string (nullable = true)-------
 |    |    |-- SubmittedDateTimeInfo: struct (nullable = true)
 |    |    |    |-- DateTimeInUtc: string (nullable = true)-------
 |    |    |    |-- TimezoneId: string (nullable = true)

Вот код, который я использовал для чтения JSON файла

    val dl = spark.read.format("com.databricks.spark.avro").load("adl://**********.azuredatalakestore.net/SD/eventhub/eventhub/1_2020_01_*_*_*_*.avro")
    val dl1=dl.select($"body".cast("string")).map(_.toString())
    val dl2=spark.read.json(dl1)
    val dl3=dl2.select($"Content.CaseNumber",$"content.TimeEntries",$"RawProperties.UserProperties.EventDateTime")
    val windowSpec = Window.partitionBy("CaseNumber").orderBy(col("EventDateTime").desc)
    val dl4=dl3.withColumn("rnk",row_number().over(windowSpec)).filter($"rnk"===1)
dl4.show

Но столбец TimeEntries приходит как ноль, но я знаю, что он имеет значения в виде массива, я новичок в кирпичах данных, любая помощь будет оценена? спасибо

...