dataframe

作者: cotecc | 来源:发表于2018-03-04 14:42 被阅读0次

创建

val df=spark.createDataset(Seq(("aaa",1,2),("bbb",3,4))).toDF("key1","key2","key3")

基础操作

df.count #行数
df.columns #列名
df.dtypes
df.printSchema #打印出列的名称和类型:
df.show(5) #打印数据,也可以用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)) #数据集划分为训练和测试集
df.union(df2) #合并另一个df

排序

df.sort("age".desc) #单字段排序
df.sort("age".desc,"balance") #多字段排序,age降序,balance升序
df.groupBy("uid").count.sort("count".desc) #每个用户出现次数,降序排列

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操作

相关文章

网友评论

      本文标题:dataframe

      本文链接:https://www.haomeiwen.com/subject/mroffftx.html