我正在尝试检索DataFrame列的值并将其存储在变量中。我试过这个:
val name=df.select("name")
val name1=name.collect()
但以上都没有返回列" name"。
的值Spark版本:2.2.0 Scala版本:2.11.11
答案 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中的名称数组