Scala 不使用collect()从spark数据帧返回数组[String]的有效方法
我想从下面的数据框中以Scala 不使用collect()从spark数据帧返回数组[String]的有效方法,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我想从下面的数据框中以数组[String]的形式返回child root |-- parent: string (nullable = false) |-- child: array (nullable = true) | |-- element: string (containsNull = true) 我目前正在做这项工作,它的工作数据更少 df.collect().flatMap(x => x.getAs[Seq[String]]("c
数组[String]
的形式返回child
root
|-- parent: string (nullable = false)
|-- child: array (nullable = true)
| |-- element: string (containsNull = true)
我目前正在做这项工作,它的工作数据更少
df.collect().flatMap(x => x.getAs[Seq[String]]("child")).mkString(",")
但是有很多数据,spark驱动程序正在内存不足的情况下运行,因为collect()
就是这样做的
从上述数据帧返回字符串数组的有效方法是什么?使用flatMap,如:
df.flatMap(x => x.getAs[Seq[String]]("childsn")).show()
将子项分解为新的字符串列:
/*
+-------+
| value|
+-------+
|child_1|
|child_2|
+-------+
*/
如果需要创建另一列,子列之间用逗号分隔:
df.flatMap(x => Seq(x.getAs[Seq[String]]("childsn").mkString(","))).show()
它给出:
/*
+---------------+
| value|
+---------------+
|child_1,child_2|
+---------------+
*/
为什么需要使用驱动程序收集数组?您可以在不收集和销毁驱动程序的情况下将flatmap收集到数据帧(x=>x.getAs[Seq[String]](“childsn”))不工作@EmiCareOfCell44
com.intellij.debugger.engine.evaluation.EvaluateException:错误评估方法:“”:java.lang.IllegalArgumentException:无效参数计数:应为2,收到1
我收到此错误。我想以数组[String]的形式返回,而不是DFT,该错误与如何使用Intellij调试代码有关。与Spark/Sclathis代码相关的任何内容都不会给我带有Array[String]的数据帧,也不会给我没有dataframe的Array[String]本身。我只需要一个数组[字符串]而不是数据帧。为什么需要数组?你想用它做什么?。使用Spark处理一个大文件,然后在一台机器的内存中进行收集是没有意义的,除非您应用某种缩减或显示任何类型的统计或度量,或应用无法分布的算法。我需要一个数组,因为接受此函数输出的函数将数组作为输入,并且该函数不能由我更改。