2016-11-10 2 views
1

В объекте DataFrame в Apache Spark (я использую интерфейс Scala), если я повторяю его объекты Row, есть ли способ извлечь значения структуры по имени?Получить элементы структуры типа строки по имени в SPARK SCALA

Я использую приведенный ниже код для извлечения по имени, но я столкнулся с проблемой о том, как читать значение структуры.

Если значения были строкового типа, то мы могли бы сделать это:

val resultDF=joinedDF.rdd.map{row=> 
     val id=row.getAs[Long]("id") 
     val values=row.getAs[String]("slotSize") 
     val feilds=row.getAs[String](values) 
     (id,values,feilds) 
     }.toDF("id","values","feilds") 

Но в моем случае значений имеет ниже схему

v1: struct (nullable = true) 
    | |-- level1: string (nullable = true) 
    | |-- level2: string (nullable = true) 
    | |-- level3: string (nullable = true) 
    | |-- level4: string (nullable = true) 
    | |-- level5: string (nullable = true) 

Что я должен заменить эту строку, чтобы сделать работа с кодом, учитывая, что значение имеет указанную выше структуру.

row.getAs[String](values) 
+0

Почему вы делаете ДФ => рдд = > df? Похоже, ваше преобразование может быть выражено операциями DataFrame и избавит вас от многих проблем в процессе. – maasg

+0

, потому что я должен выполнить некоторые вычисления по ряду строк, и мне требуется это преобразование для перемещения по строкам данных по строкам. – satyambansal117

+0

Какие изрядные вычисления? – maasg

ответ

12

Вы можете получить доступ к struct элементы моего первого извлечения другого (Структуры моделируется как другой в искры) от верхнего уровня так:

val level1 = row.getAs[Row]("struct").getAs[String]("level1") 
Смежные вопросы