Как я могу получить доступ к определенным элементам структуры в блоке данных искровой scala? [Дубликат]

View([function_name]) - например. View(mean) Обязательно используйте верхний регистр [V]. В редакторе откроется код только для чтения.

5
задан zero323 16 July 2016 в 16:17
поделиться

2 ответа

Ошибка, которую вы видите, должна быть почти понятной. Существует строгое сопоставление типов Catalyst / SQL и типов Scala, которые можно найти в в соответствующем разделе из справочника Spark SQL, DataFrames и Datasets Guide .

В частности, типы struct преобразуются в o.a.s.sql.Row (в вашем конкретном случае данные будут отображаться как Seq[Row]).

Существуют разные методы, которые могут использоваться для отображения данных как конкретных типов :

с использованием только прежнего подхода может быть применимым в этом конкретный сценарий.

Если вы хотите получить доступ к investments.funding_round.raised_amount с помощью UDF, вам понадобится что-то вроде этого:

val getRaisedAmount = udf((investments: Seq[Row]) => scala.util.Try(
  investments.map(_.getAs[Row]("funding_round").getAs[Long]("raised_amount"))
).toOption)

, но простой select должен быть намного безопаснее и чище:

df.select($"investments.funding_round.raised_amount")
11
ответ дан Community 18 August 2018 в 09:46
поделиться

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

https://github.com/lesbroot/typedudf

import typedudf.TypedUdf
import typedudf.ParamEncoder._

case class Foo(x: Int, y: String)
val fooUdf = TypedUdf((foo: Foo) => foo.x + foo.y.length)
df.withColumn("sum", fooUdf($"foo"))
0
ответ дан lesbroot 18 August 2018 в 09:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: