获取Spark中DataFrame列的值

时间:2017-09-21 16:10:09

标签: scala apache-spark

我正在尝试检索DataFrame列的值并将其存储在变量中。我试过这个:

val name=df.select("name")
 val name1=name.collect()

但以上都没有返回列" name"。

的值

Spark版本:2.2.0 Scala版本:2.11.11

2 个答案:

答案 0 :(得分:8)

这里有几件事。如果你想看到所有数据收集是要走的路。但是,如果您的数据太大,将导致驱动器失败。

所以替代方法是检查数据帧中的几个项目。我通常做的是

df.limit(10).select("name").as[String].collect()

这将提供10个元素的输出。但现在输出看起来不太好

所以,第二种选择是

df.select("name").show(10)

这将打印前10个元素,有时候如果列值很大,通常会把“...”代替实际值,这很烦人。

因此有第三个选项

df.select("name").take(10).foreach(println)

取10个元素并打印出来。

现在,在所有情况下,您都无法获得公平的数据样本,因为前10个数据将被选中。因此,要真正从数据帧中随机拾取,您可以使用

df.select("name").sample(.2, true).show(10)
or
df.select("name").sample(.2, true).take(10).foreach(println)

您可以检查数据框上的“示例”功能

答案 1 :(得分:3)

第一个会做:)

val name = df.select("name")将返回另一个DataFrame。您可以举例name.show()来显示DataFrame的内容。你也可以收集或收集AsMap来实现驱动程序的结果,但要注意,数据量对于驱动程序来说不应该太大

你也可以这样做:

val names = df.select("name").as[String].collect()

这将返回此DataFrame中的名称数组