Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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 不使用collect()从spark数据帧返回数组[String]的有效方法_Scala_Apache Spark_Apache Spark Sql - Fatal编程技术网

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处理一个大文件,然后在一台机器的内存中进行收集是没有意义的,除非您应用某种缩减或显示任何类型的统计或度量,或应用无法分布的算法。我需要一个数组,因为接受此函数输出的函数将数组作为输入,并且该函数不能由我更改。