Как опция `mergeSchema` в Databricks Delta Lake обрабатывает разные типы данных? - PullRequest
0 голосов
/ 18 февраля 2020

Что делает опция Databricks Delta Lake mergeSchema, если к существующему столбцу добавляется другой тип данных?

Например, если для таблицы Delta Lake представлена ​​схема foo INT, bar INT, что будет происходит при попытке записи-добавления новых данных со схемой foo INT, bar DOUBLE при указании опции mergeSchema = true?

Ответы [ 2 ]

0 голосов
/ 03 марта 2020

Я думаю, что это то, что вы ищете.

import org.apache.spark.sql.SQLContext
import org.apache.spark.sql.types.{StructType, StructField, StringType, IntegerType};
import org.apache.spark.sql.functions.input_file_name

val customSchema = StructType(Array(
    StructField("field1", StringType, true),
    StructField("field2", StringType, true),
    StructField("field3", StringType, true),
    StructField("field4", StringType, true),
    StructField("field5", StringType, true),
    StructField("field6", StringType, true),
    StructField("field7", StringType, true)))

val df = sqlContext.read
    .format("com.databricks.spark.csv")
    .option("header", "false")
    .option("sep", "|")
    .schema(customSchema)
    .load("mnt/rawdata/corp/ABC*.gz")
    .withColumn("file_name", input_file_name())

Просто назовите 'field1', 'field2' и т. Д. c., В качестве фактических имен полей. Кроме того, 'AB C*. Gz' выполняет поиск по шаблону для файлов, начинающихся с указанной строки c, например, 'ab c' или чего-либо еще, и символа '*', что означает любую комбинацию символы вверх по обратному символу sh и «.gz», что означает, что это заархивированный файл. Конечно, ваши могут отличаться, поэтому просто измените это соглашение, чтобы удовлетворить ваши конкретные c потребности.

0 голосов
/ 18 февраля 2020

Запись не удалась. (по состоянию на озере Дельта 0.5.0 для блоков данных 6.3)

...