本文介绍了Spark:使用地图中的键进行选择的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要在DataFramemap中用键geo.cc选择:

I need to select with the key geo.cc in a map in a DataFrame:

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

,但是键的值(中间带有圆点)似乎使Spark感到困惑.如果我写:

but the value of the key, with its dot in the middle, seems to confuse Spark. If I write:

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

我得到了错误:

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

我该怎么办? (不用说,我不控制键,即我无法将geo.cc字符串更改为例如geo_cc.

What can I do? (needless to say, I do not control the key, i.e. I cannot change that geo.cc string to e.g. geo_cc.

推荐答案

您应使用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上.

on a specific column, not DataFrame.

这篇关于Spark:使用地图中的键进行选择的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-27 22:32