Spark:在地图中选择键

时间:2018-06-05 17:15:46

标签: apache-spark apache-spark-sql

我需要使用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

2 个答案:

答案 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| // +-----------------------+