創(chuàng)建
val df=spark.createDataset(Seq(("aaa",1,2),("bbb",3,4))).toDF("key1","key2","key3")
基礎(chǔ)操作
df.count #行數(shù)
df.columns #列名
df.dtypes
df.printSchema #打印出列的名稱和類型:
df.show(5) #打印數(shù)據(jù)买雾,也可以用head,take,不過展示的list格式
df.drop("age") #刪除某列
列選擇
df.select("col1","col2")
df.select($"age",$"balance"+10) #列選擇并簡單運算
df.select("age","salary").distinct #去重
行篩選
df.filter("age=30")
df.filter(!$"gameimei".isin("-","000"))
df.filter("age=30orbalance>4700") #多條件篩選
df.filter("substr(marital,0,1)='m'") #使用sql語法進行篩選
withColumn方法
df.withColumn("newCol",$"rawCol"+3) #增加新列,使用原來的列值+3凡资,返回新DF
df.withColumn("post_date",split($"post_time","")(0))
people.withColumn("tmp",split($"value",";")).select(
$"tmp".getItem(0).as("name"),
$"tmp".getItem(1).as("age"),
$"tmp".getItem(2).as("job")
).filter("name!="name"").show()
修改列名
df.withColumnRenamed("name","Name") #修改單個列名
df.toDF(Seq("col1","col2"):_*) #替換全部列名
val Array(training,test)=ratings.randomSplit(Array(0.8,0.2)) #數(shù)據(jù)集劃分為訓(xùn)練和測試集
df.union(df2) #合并另一個df
排序
df.sort("age".desc) #單字段排序
df.sort("age".desc,"balance") #多字段排序,age降序,balance升序
df.groupBy("uid").count.sort("count".desc) #每個用戶出現(xiàn)次數(shù)斤富,降序排列
groupby,apply,join
df.agg(max("age"),min("age")).show()
df.groupBy("marital").agg(avg("age")).show()
df.join(df2,df("id")===df2("id")) #join操作