如何在 Spark Scala 中将 WrappedArray 转换为 List?
Posted
技术标签:
【中文标题】如何在 Spark Scala 中将 WrappedArray 转换为 List?【英文标题】:How can I cast WrappedArray to List in Spark Scala? 【发布时间】:2021-07-06 10:05:34 【问题描述】:我使用 DataFrame 来处理 spark 中的数据。我在这个数据框中有一个数组列。在我想做的所有转换结束时,我有一个包含一个数组列和一行的数据框。为了应用 groupby、map 和 reduce,我想把这个数组作为一个列表,但我做不到。
.drop("ScoresArray")
.filter($"min_score" < 0.2)
.select("WordsArray")
.agg(collect_list("WordsArray"))
.withColumn("FlattenWords", flatten($"collect_list(WordsArray)"))
.drop("collect_list(WordsArray)")
.collect()
val test1 = words(0).getAs[immutable.List[String]](0)
这是错误信息:
[error] (run-main-0) java.lang.ClassCastException: scala.collection.mutable.WrappedArray$ofRef cannot be cast to scala.collection.immutable.List
[error] java.lang.ClassCastException: scala.collection.mutable.WrappedArray$ofRef cannot be cast to scala.collection.immutable.List
[error] at analysis.Analysis$.main(Analysis.scala:37)
[error] at analysis.Analysis.main(Analysis.scala)
[error] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[error] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error] at java.lang.reflect.Method.invoke(Method.java:498)
[error] stack trace is suppressed; run last Compile / bgRun for the full output
想法?
【问题讨论】:
为什么首先“需要”它是一个列表?只需使用数组。特别是,如果你要通过索引来访问它,就像在你的代码示例中一样....getAs[Seq[String]]
【参考方案1】:
您不能将数组转换为列表,但可以将一个数组转换为另一个。
val test1 = words(0).getSeq[String](0).toList
【讨论】:
以上是关于如何在 Spark Scala 中将 WrappedArray 转换为 List?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spark Scala 中将 WrappedArray 转换为 List?
Scala - 如何在 Spark SQL 查询中将日期字符串转换为时间戳?
如何在 Spark 2 Scala 中将 Row 转换为 json
如何在 Scala 中将数据帧转换为 Apache Spark 中的数据集?