package com.jason.example

import org.apache.spark.sql.functions.broadcast

class DFTest extends SparkInstance {

  import spark.implicits._

  val df = Seq(
("jason", , "理想",),
(null, , "理想",),
("mac", , "理想",),
("mac", , "理想",)
).toDF("name", "depid", "company","groupid").repartition()
val df3 = Seq(
("jason", , "理想",),
("dong", , "理想",),
("mac", , "理想",)
).toDF("name", "depid", "company","groupid").repartition()
val df2 = Seq(
(,"周浦",),
(,"孙桥",),
(,"金桥",)
).toDF("depid","addr","gid").repartition()
def ff(): Unit = {
println(df.toString())//[name: string, depid: int ... 1 more field]
println(df.schema)
df.printSchema()
df.explain(true)//Prints the plans (logical and physical) to the console for debugging purposes.
println(df.dtypes.mkString(","))//(name,StringType),(depid,IntegerType),(company,StringType)
println(df.columns.mkString(","))//
//df.withWatermark() ???
df.show(,false)
df.na.drop("any"/*"all"*/).show(false) //删除df中包含null 或NaN 的记录,如果为any 则只要有有一列为
//null 或NaN 则删除整行,如果是all 则所有列是null ho NaN 时才删除整行
df.na.fill("xxx",Seq("name")).show()//缺失值填充,把null 或 NaN 替换为所需要的值
df.na.replace("name",Map("jason"->"abc","dong"->"def")).show()//将字段name 中 的值按照map 内容进行更改
//df.stat.xxx ???
df.join(df2,(df("depid")===df2("depid")).and(df("groupid")===df2("gid")),"right").show()
df.join(df2,(df("depid")===df2("depid")).and(df("groupid")===df2("gid")),"left").show() df.join(df2,(df("depid")===df2("depid")).and(df("groupid")===df2("gid")),"left").show()
println("="*)
df.join(df2.hint("broadcast"),(df("depid")===df2("depid")).and(df("groupid")===df2("gid")),"left").show()
df.join(broadcast(df2),(df("depid")===df2("depid")).and(df("groupid")===df2("gid")),"left").show()//spark 默认广播10MB的小表
//df2.hint("broadcast") 和 broadcast(df2) 是等同的
df.crossJoin(df2).show()//笛卡尔积
df.sort($"name".desc,$"depid".asc).show()
df.select("name","depid").show()
df.selectExpr("name as nm","depid as id").show()
df.filter(s"""name='jason'""").show()
df.where(s"""name='jason'""").select("name","depid").show
df.rollup("name","depid").count().show()
df.cube("name","depid").count().show()
df.groupBy("name","depid").count().show()
df.agg("name"->"max","depid"->"avg").show()
df.groupBy("name","depid").agg("name"->"max","depid"->"avg").show()
df.limit().show()
df.union(df3).show()
df.unionByName(df3).show()
df.intersect(df3).show()//交集
df.except(df3).show() //差集
df.sample(0.5).show()
df.randomSplit(Array(0.4,0.6)).apply().show()
df.withColumn("depid",$"depid".<=()).show() // 该方法可以替换或增加一列到原df, 第二个参数中的col必须时df中的元素
df.withColumnRenamed("name","姓名").show()
df.drop("name","depid")//舍弃某几列
df.distinct()
df.dropDuplicates("name").show() //根据某几列去重,会保留最后一条数据
df.describe().show() //count,mean,min,max
df.summary().show()//count,min,25%,50%,max
df.head() //所有的数据会被collect到driver
df.toLocalIterator() spark.stop()
}
} object DFTest {
def main(args: Array[String]): Unit = {
val dt = new DFTest
dt.ff()
}
}

dataframe 基本操作的更多相关文章

  1. DataFrame基本操作

    这些操作在网上都可以百度得到,为了便于记忆自己再根据理解总结在一起.---------励志做一个优雅的网上搬运工 1.建立dataframe (1)Dict to Dataframe df = pd. ...

  2. python做数据分析pandas库介绍之DataFrame基本操作

    怎样删除list中空字符? 最简单的方法:new_list = [ x for x in li if x != '' ] 这一部分主要学习pandas中基于前面两种数据结构的基本操作. 设有DataF ...

  3. 用python做数据分析pandas库介绍之DataFrame基本操作

    怎样删除list中空字符? 最简单的方法:new_list = [ x for x in li if x != '' ] 这一部分主要学习pandas中基于前面两种数据结构的基本操作. 设有DataF ...

  4. pandas库介绍之DataFrame基本操作

    怎样删除list中空字符? 最简单的方法:new_list = [ x for x in li if x != '' ] 今天是5.1号. 这一部分主要学习pandas中基于前面两种数据结构的基本操作 ...

  5. 用python做数据分析4|pandas库介绍之DataFrame基本操作

    原文地址 怎样删除list中空字符? 最简单的方法:new_list = [ x for x in li if x != '' ] 今天是5.1号. 这一部分主要学习pandas中基于前面两种数据结构 ...

  6. 机器学习三剑客之Pandas中DataFrame基本操作

    Pandas 是基于Numpy 的一种工具,是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具.Pandas提供了大量能使我们快速便捷 ...

  7. pd库dataframe基本操作

    一.查看数据(查看对象的方法对于Series来说同样适用) 1.查看DataFrame前xx行或后xx行 a=DataFrame(data); a.head(6)表示显示前6行数据,若head()中不 ...

  8. pyspark SparkSession及dataframe基本操作

    from pyspark import SparkContext, SparkConf import os from pyspark.sql.session import SparkSession f ...

  9. python数据类型之pandas—DataFrame

    DataFrame定义: DataFrame是pandas的两个主要数据结构之一,另一个是Series —一个表格型的数据结构 —含有一组有序的列 —大致可看成共享同一个index的Series集合 ...

随机推荐

  1. 【Python】itertools之product函数

    [转载]源博客 product 用于求多个可迭代对象的笛卡尔积(Cartesian Product),它跟嵌套的 for 循环等价.即: product(A, B) 和 ((x,y) for x in ...

  2. 使用CefSharp前端后台交换

    原文:使用CefSharp在.NET中嵌入Google kernel 使用CefSharp可以在.NET轻松的嵌入Html,不用担心WPF与Winform 控件与它的兼容性问题,CefSharp大部分 ...

  3. Qt url中获取文件名

    QString filename = reply->rawHeader("Content-Disposition"); filename = filename.mid(QSt ...

  4. Git内部原理浅析

    Git独特之处 Git是一个分布式版本控制系统,首先分布式意味着Git不仅仅在服务端有远程仓库,同时会在本地也保留一个完整的本地仓库(.git/文件夹),这种分布式让Git拥有下面几个特点: 1.直接 ...

  5. X264-视频帧的存取

    X264的编码器结构体x264_t中的子结构体字段frames包含了4个临时视频帧序列空间:current.next.unused和reference,分别保存当前编码帧.将编码帧序列.未处理原始视频 ...

  6. 基于JieBaNet+Lucene.Net实现全文搜索

    实现效果: 上一篇文章有附全文搜索结果的设计图,下面截一张开发完成上线后的实图: 基本风格是模仿的百度搜索结果,绿色的分页略显小清新. 目前已采集并创建索引的文章约3W多篇,索引文件不算太大,查询速度 ...

  7. IBM LOTUS DOMINO 9 部署SSL证书

    前言 随着SHA1算法在2016年12月31日以后,将被强制淘汰,所有新的SSL证书都必须支持SHA256算法,所以我们必须将IBM Domino Server升级到9.0以上才可以支持SHA256算 ...

  8. SDL2学习(二):常用枚举值和函数

    1. 高频枚举值或结构体 1.1 SDL_WindowFlags /** * \brief The flags on a window * * \sa SDL_GetWindowFlags() */ ...

  9. Maven 拥有三套相互独立的生命周期:clean、default、site

    table th:nth-of-type(1) { width: 70px; } table th:nth-of-type(2) { width: 100px; } 生命周期 目的 包含的阶段 cle ...

  10. java web问题总结

    1.java web上传附图页面空,无返回 原因:前端页面与后台端口不一致,无页面可返回 2.上传excel导入数据时,只能导入第一条,后面的数据无法导入,缓存设置过小.