我需要使用geo.cc
中的map
中的密钥DataFrame
进行选择:
|-- params: map (nullable = true)
| |-- key: string
| |-- value: string (valueContainsNull = true)
但是键的值,其中间的点,似乎混淆了Spark。如果我写:
X.filter(X("params.geo.cc") === "us")
我收到错误:
org.apache.spark.sql.AnalysisException: Can't extract value from params#3[geo];
我该怎么办? (不用说,我不控制密钥,即我无法将geo.cc
字符串更改为geo_cc
。
答案 0 :(得分:1)
试试这个:
X.filter(col("params")("key") === "geo.cc" && col("params")("value") === "us")
答案 1 :(得分:1)
您应该使用std::map<int,int>::const_iterator it = foo.find(1);
:
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|
// +-----------------------+
。