Котлин с помощью spark создает фрейм данных из POJO, в котором есть классы pojo внутри

#apache-spark #kotlin

Вопрос:

У меня есть класс данных kotlin, как показано ниже

 data class Persona_Items(
     val key1:Int = 0,
     val key2:String = "Hello")

data class Persona(
    val persona_type: String,
    val created_using_algo: String,
    val version_algo: String,
    val createdAt:Long,
    val listPersonaItems:List<Persona_Items>)


data class PersonaMetaData
    (val user_id: Int,
     val persona_created: Boolean,
     val persona_createdAt: Long,
     val listPersona:List<Persona>)

fun main() {

    val personalItemList1 = listOf(Persona_Items(1), Persona_Items(key2="abc"), Persona_Items(10,"rrr"))
    val personalItemList2 = listOf(Persona_Items(10), Persona_Items(key2="abcffffff"),Persona_Items(20,"rrr"))

    val persona1 = Persona("HelloWorld","tttAlgo","1.0",10L,personalItemList1)
    val persona2 = Persona("HelloWorld","qqqqAlgo","1.0",10L,personalItemList2)
    val personMetaData = PersonaMetaData(884,true,1L, listOf(persona1,persona2))

    val spark = SparkSession
        .builder()
        .master("local[2]")
        .config("spark.driver.host","127.0.0.1")
        .appName("Simple Application").orCreate


    val rdd1: RDD<PersonaMetaData> = spark.toDS(listOf(personMetaData)).rdd()

    val df = spark.createDataFrame(rdd1, PersonaMetaData::class.java)

    df.show(false)
}
 

Когда я пытаюсь создать фрейм данных, я получаю следующую ошибку.
Исключение в главном потоке java.lang.Исключение UnsupportedOperationException: Схема для типа src.Persona не поддерживается.

Означает ли это, что для списка классов данных создание фрейма данных не поддерживается? Пожалуйста, помогите мне понять, чего не хватает в приведенном выше коде.

Ответ №1:

Ну, это работает для меня из коробки. Я создал простое приложение для вас, чтобы продемонстрировать его, посмотрите здесь, https://github.com/szymonprz/kotlin-spark-simple-app/blob/master/src/main/kotlin/CreateDataframeFromRDD.kt

вы можете просто запустить эту основную программу, и вы увидите, что отображается правильное содержимое. Возможно, вам нужно исправить конфигурацию инструмента сборки, если вы видите что-то специфичное для scala в проекте kotlin, тогда вы можете проверить мой build.gradle внутри этого проекта или вы можете прочитать больше об этом здесь https://github.com/JetBrains/kotlin-spark-api/blob/main/docs/quick-start-guide.md

Комментарии:

1. Спасибо, что ответили. Я отредактировал вопрос. Не могли бы вы, пожалуйста, помочь мне лучше понять ошибку.