как вставить фрейм данных, имеющий столбец карты в таблице кустов - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть фрейм данных с несколькими столбцами, из которых один столбец имеет тип карты (строка, строка). Я могу напечатать этот фрейм данных, имеющий столбец в виде карты, которая дает данные в виде карты («PUN» -> «Pune»). Я хочу записать этот фрейм данных в таблицу кустов (хранится как avro), в которой есть тот же столбец с картой типов.

Df.withcolumn("cname", lit("Pune"))
withcolumn("city_code_name", map(lit("PUN"), col("cname"))
Df.show(false)

//table - created external hive table..stored as avro..with avro schema

После удаления этого столбца типа карты я могу сохранить фрейм данных в таблицу кустов avro.

Сохранить путь к таблице кустов:

  1. spark.save - сохранение avro-файла
  2. spark. sql - создание раздела на таблице кустов с расположением файла avro

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

см. Этот тестовый пример как пример из искровых тестов

  test("Insert MapType.valueContainsNull == false") {
    val schema = StructType(Seq(
      StructField("m", MapType(StringType, StringType, valueContainsNull = false))))
    val rowRDD = spark.sparkContext.parallelize(
      (1 to 100).map(i => Row(Map(s"key$i" -> s"value$i"))))
    val df = spark.createDataFrame(rowRDD, schema)
    df.createOrReplaceTempView("tableWithMapValue")
    sql("CREATE TABLE hiveTableWithMapValue(m Map <STRING, STRING>)")
    sql("INSERT OVERWRITE TABLE hiveTableWithMapValue SELECT m FROM tableWithMapValue")

    checkAnswer(
      sql("SELECT * FROM hiveTableWithMapValue"),
      rowRDD.collect().toSeq)

    sql("DROP TABLE hiveTableWithMapValue")
  }

также, если вы хотите сохранить опцию, вы можете попробовать с saveAsTable, как показано здесь

Seq(9 -> "x").toDF("i", "j")
        .write.format("hive").mode(SaveMode.Overwrite).option("fileFormat", "avro").saveAsTable("t")

yourdataframewithmapcolumn.write.partitionBy - это способ создания разделов.

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

Этого можно добиться с помощью saveAsTable Пример:

    Df\
        .write\
        .saveAsTable(name='tableName',
                     format='com.databricks.spark.avro',
                     mode='append',
                     path='avroFileLocation')

Измените параметр режима на любой подходящий вам

...