Изменить имена столбцов вложенных данных в bigquery, используя spark - PullRequest
1 голос
/ 14 февраля 2020

Я пытаюсь записать некоторые данные в BigQuery с помощью Spark Scala, My spark df выглядит так,

root
 |-- id: string (nullable = true)
 |-- cost: double (nullable = false)
 |-- nodes: array (nullable = true)
 |    |-- element: struct (containsNull = true)
 |    |    |-- settled: string (nullable = true)
 |    |    |-- constant: string (nullable = true)
 |-- status: string (nullable = true)

Я пытался изменить структуру фрейма данных.

val schema = StructType(Array(
  StructField("id", StringType, true),
  StructField("cost", DoubleType, true),
  StructField("nodes", StructType(Array(StructField("settled", StringType), StructField("constant", StringType)))),
  StructField("status", StringType, true)))

val actualDf = spark.createDataFrame(results, schema)

Но это не сработало. Когда это записывается в BigQuery, имена столбцов выглядят следующим образом:

id, стоимость, node.list.element.settled, node.list.element.constant, статус

Можно ли изменить имена этих столбцов следующим образом:

id, стоимость, расчет, константа, статус

1 Ответ

3 голосов
/ 14 февраля 2020

Вы можете explode массив узлов, чтобы получить сглаженную структуру столбцов, а затем записать фрейм данных в bigquery.

Пример:

val jsn_ds=Seq("""{"id":1, "cost": "2.0","nodes":[{"settled":"u","constant":"p"}],"status":"s"}""").toDS

spark.read.json(jsn_ds).printSchema
// root
// |-- cost: string (nullable = true)
// |-- id: long (nullable = true)
// |-- nodes: array (nullable = true)
// |    |-- element: struct (containsNull = true)
// |    |    |-- constant: string (nullable = true)
// |    |    |-- settled: string (nullable = true)
// |-- status: string (nullable = true)

spark.read.json(jsn_ds).
      withColumn("expld",explode('nodes)).
      select("*","expld.*").
      drop("expld","nodes").
      show()

//+----+---+------+--------+-------+
//|cost| id|status|constant|settled|
//+----+---+------+--------+-------+
//| 2.0|  1|     s|       p|      u|
//+----+---+------+--------+-------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...