Spark: выберите с помощью ключа на карте - PullRequest
0 голосов
/ 05 июня 2018

Мне нужно выбрать ключ geo.cc в map в DataFrame:

 |-- params: map (nullable = true)
 |    |-- key: string
 |    |-- value: string (valueContainsNull = true)

, но значение ключа с точкой в ​​середине, кажется, сбивает с толкуСпарк.Если я напишу:

X.filter(X("params.geo.cc") === "us")

Я получу ошибку:

org.apache.spark.sql.AnalysisException: Can't extract value from params#3[geo];

Что я могу сделать?(Излишне говорить, что я не контролирую ключ, то есть я не могу изменить эту строку geo.cc, например, geo_cc.

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Вы должны использовать apply:

val df = Seq((1L, Map("geo.cc" -> "US"))).toDF("id", "params")

df.select($"params"("geo.cc") === "US").show
// +-----------------------+
// |(params['geo.cc'] = US)|
// +-----------------------+
// |                   true|
// +-----------------------+

или getItem

df.select($"params".getItem("geo.cc") === "US").show
// +-----------------------+
// |(params['geo.cc'] = US)|
// +-----------------------+
// |                   true|
// +-----------------------+

для определенного столбца, а не DataFrame.

0 голосов
/ 05 июня 2018

Попробуйте это:

X.filter(col("params")("key") === "geo.cc" && col("params")("value") === "us")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...