app开发者平台在数字化时代的重要性与发展趋势解析
762
2022-09-02
Scala002-DataFrame筛选多个列
Intro
用scala做数据清洗,需要把两份数据union,为了防止两个dataframe的字段不一致,需要先筛选出两者共有的,此为背景。版本信息:
scala:2.11.12spark:2.4.4
数据构造
import org.apache.spark.sql.functions._import spark.implicits._import org.apache.spark.ml.feature.VectorAssemblerimport org.apache.spark.ml.linalg.{Vector, Vectors}val df = Seq( ("A1", 25, 1,0.64,0.36), ("A1", 26, 1,0.34,0.66), ("B1", 27, 0,0.55,0.45), ("C1", 30, 0,0.14,0.86) ).toDF("id", "age", "label","pro0","pro1")df.printSchema()df.show()
root |-- id: string (nullable = true) |-- age: integer (nullable = false) |-- label: integer (nullable = false) |-- pro0: double (nullable = false) |-- pro1: double (nullable = false)+---+---+-----+----+----+| id|age|label|pro0|pro1|+---+---+-----+----+----+| A1| 25| 1|0.64|0.36|| A1| 26| 1|0.34|0.66|| B1| 27| 0|0.55|0.45|| C1| 30| 0|0.14|0.86|+---+---+-----+----+----+import org.apache.spark.sql.functions._import spark.implicits._import org.apache.spark.ml.feature.VectorAssemblerimport org.apache.spark.ml.linalg.{Vector, Vectors}df: org.apache.spark.sql.DataFrame = [id: string, age: int ... 3 more fields]
多个列筛选
这里的前提是我们拿到了这些列名的集合,直接select的方式取出对应的列
df.columns.slice(0,3)
res1: Array[String] = Array(id, age, label)
df.select(df.columns.slice(0,3).map(name => col(name)): _*).show()
+---+---+-----+| id|age|label|+---+---+-----+| A1| 25| 1|| A1| 26| 1|| B1| 27| 0|| C1| 30| 0|+---+---+-----+
当然也可以用df.select("id","age","label"),但是如果列名很多,或者不是固定的,则该方法不适用。
2020-03-04 于南京市栖霞区
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~