Fra*_*ank 5 apache-spark apache-spark-sql
我需要使用geo.cca mapin a 中的键进行选择DataFrame:
|-- params: map (nullable = true)
| |-- key: string
| |-- value: string (valueContainsNull = true)
Run Code Online (Sandbox Code Playgroud)
但是键的值,中间有一个点,似乎混淆了 Spark。如果我写:
X.filter(X("params.geo.cc") === "us")
Run Code Online (Sandbox Code Playgroud)
我收到错误:
org.apache.spark.sql.AnalysisException: Can't extract value from params#3[geo];
Run Code Online (Sandbox Code Playgroud)
我能做什么?(不用说,我不控制键,即我不能将该geo.cc字符串更改为例如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|
// +-----------------------+
Run Code Online (Sandbox Code Playgroud)
或者getItem
df.select($"params".getItem("geo.cc") === "US").show
// +-----------------------+
// |(params['geo.cc'] = US)|
// +-----------------------+
// | true|
// +-----------------------+
Run Code Online (Sandbox Code Playgroud)
在特定列上,而不是DataFrame.
尝试这个 :
X.filter(col("params")("key") === "geo.cc" && col("params")("value") === "us")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3049 次 |
| 最近记录: |