Transformation操作
与RDD类似的操作
map、filter、flatMap、mapPartitions、sample、 randomSplit、 limit、
distinct、dropDuplicates、describe,而以上这些都是企业中比较常用的,这里在一个文件中统一论述
val df1 = spark.read.json("src/main/resources/people.json")
// 使用map去除某些字段
df1.map(row => row.getAs[Long](1)).withColumnRenamed("value","age").show()
//df1.map(row => row.getAs[String]("address")).show()
//df1.map(row => row.getString[String](0)).show()
// randomSplit,按照数组中的权重将数据集划分为不同的比例,可用于机器学习
val df2 = df1.randomSplit(Array(0.5, 0.6, 0.7))
df2(0).count
df2(1).count
df2(2).count
// 取10行数据生成新的DataSet
val df3 = df1.limit(5).show()
// distinct,去重
val df4 = df1.union(df1)
df4.distinct.count
// 这个方法,不需要传入任何的参数,默认根据所有列进行去重,然后按数据行的顺序保留每行数据出现的第一条。
df4.dropDuplicates.show
// 传入的参数是一个序列。你可以在序列中指定你要根据哪些列的重复元素对数据表进行去重,然后也是返回每一行数据出现的第一条
//def dropDuplicates(colNames: Seq[String])
df4.dropDuplicates("name", "age").show
df4.dropDuplicates("name").show
// 返回全部列的统计(count、mean、stddev、min、max)
df4.describe().show
// 返回指定列的统计
df4.describe("age").show
df4.describe("name", "age").show
存储相关
persist、checkpoint、unpersist、cache
备注:Dataset 默认的存储级别是 MEMORY_AND_DISK
val df1 = spark.read.json("src/main/resources/people.json")
import org.apache.spark.storage.StorageLevel
spark.sparkContext.setCheckpointDir("src/main/resources/data/checkpoint")
df1.show()
df1.checkpoint()
// 默认的存储级别是MEMORY_AND_DISK
df1.cache()
df1.persist(StorageLevel.MEMORY_ONLY)
println(df1.count())
df1.unpersist(true
select相关
列的多种表示:select、selectExpr、drop、withColumn、withColumnRenamed、cast(内置函数)
import spark.implicits._
import org.apache.spark.sql.functions._
val df1 = spark.read.json("src/main/resources/people.json")
// 列的多种表示方法。使用'、""、$""、col()、df("")
// 注意:不要混用;必要时使用spark.implicitis._;并非每个表示在所有的地方都有效
df1.select('name, 'age, 'address).show
df1.select("name", "age", "address").show
df1.select($"name", $"age", $"address").show
df1.select(col("name"), col("age"), col("address")).show
df1.select(df1("name"), df1("age"), df1("address")).show
// 下面的写法无效并且会报错
// df1.select("name", "age"+10, "address").show
// df1.select("name", "age+10", "address").show
// 这样写才符合语法
df1.select($"name", $"age"+10, $"address").show
df1.select('name, 'age+10, 'address).show
// 可使用expr表达式(expr里面只能使用引号)
df1.select(expr("name"), expr("age+100"), expr("address")).show
df1.selectExpr("name as ename").show
df1.selectExpr("power(age, 2)", "address").show
df1.selectExpr("round(age, -3) as newAge", "name", "address").show
// drop、withColumn、 withColumnRenamed、casting
// drop 删除一个或多个列,得到新的DF
df1.drop("name")
df1.drop("name", "age")
// withColumn,修改列值
val df2 = df1.withColumn("age", $"age"+10)
df2.show
// withColumnRena

551

被折叠的 条评论
为什么被折叠?



