当前位置: 首页 > 知识库问答 >
问题:

带有嵌套数据结构的Scala访问映射[String,Any]

璩无尘
2023-03-14
  val parameters: Map[String, Any] = Map("digits" -> Seq(1, 2, 3, 4, 5, 6, 7, 8, 

想要将每个数字乘以3,如下所示

class PrintMap extends App {
  val conf: SparkConf = new SparkConf()
    .setAppName("sparkApiSample")
    .setMaster("local[*]")

  val session: SparkSession = SparkSession
    .builder()
    .config(conf)
    .getOrCreate()

  val parameters: Map[String, Any] = Map("digits" -> Seq(1, 2, 3, 4, 5, 6, 7, 8, 9, 0))

  val numbers: Seq[Int] = parameters("digits").asInstanceOf[Seq[Int]]
  val rdd = session.sparkContext.parallelize(numbers)

  val result = Map("result" -> rdd.map(x => x * 3).collect())

  // want to "access / print the contents of the Array at result
  result.get("result") match {
    case Some(x) => x.asInstanceOf[Seq[Any]].foreach(println)
    case None => println("error occurred")
  }

为什么会导致以下异常?我如何才能真正访问地图?java.lang.ClassCastException:[无法将我强制转换为Scala.collection.seq

共有1个答案

尉迟招
2023-03-14

RDD上的Collect返回数组。数组不扩展SEQ。所以x不能转换为seq。

(如)

Array(2).asInstanceOf[Seq[Int]]

引发相同的异常。

 类似资料:
  • 如何使用MapStruct映射嵌套列表? 下面是我的实体类: 我想把它映射到: 现在,我的映射器看起来像: 但它只映射“普通”属性,如Long、intger等,但它避免了嵌套列表。

  • 我可以看到…的输出 在控制台上。 为什么我的转换器不能访问内部映射? 我是否没有正确定义内部地图检查器?

  • 从另一个角度看这3行: 编辑:注意表有2000列,是否可以动态创建一个类(或向类添加属性),例如在Scala中从外部文件加载字段名和类型?我知道case类仅限于22个字段 Edit2:还要注意,任何属性都可以有多行(rowkey除外),即orderid、name、amount、supplier、account和1995+其他列,所以为所有这些属性创建单独的“singleline”类是不可行的,我正

  • 当尝试使用@Data和@Builder映射嵌套对象时,mapStruct会抛出以下错误:“在目标类型中找不到属性“profile”的读取访问器。” 为简单起见,使用Lombok简化模型 前两个映射按预期工作,但当尝试将两者结合起来时,会在编译时引发以下错误“在目标类型中的属性“配置文件”中找不到读取访问器。” 如果有人能在这件事上帮我,我会非常感激。 谢谢, 乔纳森。

  • 我有一个问题现在快把我逼疯了。我试图避免为这个映射反转创建一个中间对象。(目标:我有一个带有嵌套数据结构的映射,我想对其进行反转和爆炸。所以, 变成 目前,这不起作用。我甚至不认为上面会编译,所以就当它是伪代码吧。

  • 我有两个嵌套的case类: 当然,解决方案应该是泛型的,并且适用于任何case类。 注意:这个讨论很好地回答了如何将单个case类映射到映射。但我无法将其用于嵌套的case类。相反,我得到了: