2015-06-05 3 views
4

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

def foo(r: Row) = { 
    val ix = (0 until r.schema.length).map(i => r.schema(i).name -> i).toMap 
    val field1 = r.getString(ix("field1")) 
    val field2 = r.getLong(ix("field2")) 
    ... 
} 
dataframe.map(foo) 

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

ответ

10

Вы можете использовать "getAs" из org.apache.spark.sql.Row

r.getAs("field1") 
r.getAs("field2") 

Узнайте больше о getAs(java.lang.String fieldName)

+5

Я думаю, что это должно быть r.getAs [Любой] ("FIELDNAME") –

Смежные вопросы