Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何过滤Spark数据帧的MapType字段?_Scala_Apache Spark_Dataframe_Apache Spark Sql - Fatal编程技术网

Scala 如何过滤Spark数据帧的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中得到以下异常。

我有一个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 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))