本文介绍了Spark:使用地图中的键进行选择的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要在DataFrame
的map
中用键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:使用地图中的键进行选择的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!