Scala 如何过滤Spark数据帧的MapType字段?
我有一个Spark数据框,其中一个字段是MapType…我可以获取MapType字段的任何键的数据,但当我为特定键的特定值应用筛选器时,我无法获取数据Scala 如何过滤Spark数据帧的MapType字段?,scala,apache-spark,dataframe,apache-spark-sql,Scala,Apache Spark,Dataframe,Apache Spark Sql,我有一个Spark数据框,其中一个字段是MapType…我可以获取MapType字段的任何键的数据,但当我为特定键的特定值应用筛选器时,我无法获取数据 val line = List (("Sanjay", Map("one" -> 1, "two" -> 2)), ("Taru", Map("one" -> 10, "two" -> 20)) ) 我创建了上面列表中的RDD和DF,并试图获取DF,映射值,其中值大于等于5…..但我在Spark Repl中得到以下异常。
val line = List (("Sanjay", Map("one" -> 1, "two" -> 2)), ("Taru", Map("one" -> 10, "two" -> 20)) )
我创建了上面列表中的RDD和DF,并试图获取DF,映射值,其中值大于等于5…..但我在Spark Repl中得到以下异常。。好心帮忙
val rowrddDFFinal = rowrddDF.select(rowrddDF("data.one").alias("data")).filter(rowrddDF("data.one").geq(5))
org.apache.spark.sql.AnalysisException:已解析的属性数据1
缺失
//|g来自操作员中的数据3!将数据1[1]过滤为one4>=5;
//|在org.apache.spark.sql.catalyst.analysis.CheckAnalysis$class.failanalysis上
//|isCheckAnalysis.scala:38
//|位于org.apache.spark.sql.catalyst.analysis.Analyzer.failAnalysisAnalyzer
//|.斯卡拉:42
//|在org.apache.spark.sql.catalyst.analysis.CheckAnalysis$$anonfun$checkAn上
//|艾莉西1美元。苹果化学分析。斯卡拉:121
//|在org.apache.spark.sql.catalyst.analysis.CheckAnalysis$$anonfun$checkAn上
//|艾莉丝1美元。苹果药盒分析。斯卡拉:50美元
//|位于org.apache.spark.sql.catalyst.trees.TreeNode.foreachUpTreeNode.scala
//| :98
//|位于org.apache.spark.sql.catalyst.analysis.CheckAnalysis$class.CheckAnalysis
//|sisCheckAnalysis.scala:50
//|在org.apache.spark.sql.catalyst.analysis.Analyzer.checkanalysis上
//|斯卡拉:42
//|位于org.apache.spark.sql.SQLContext$QueryExecution.assertAnalyzedSQLCont
//|分机scala:931
要从数组或映射列访问值,可以使用column.getItem方法:
如果您更喜欢在选择后筛选,则不能再使用rowrddf.apply。相反,您应该直接访问别名列:
df
.select($"data".getItem("one").alias("data"))
.filter($"data".geq(5))
我是这样做的……你的推荐很有效val lastrddff=rowrddf.selectRowrddfdata.getItemone.aliasdata.where coldata.geq5`谢谢
df
.select($"data".getItem("one").alias("data"))
.filter($"data".geq(5))