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. WPF 动态资源 DataContext="{DynamicResource studentListKey}" DisplayMemberPath="Name"

    public class StudentList:ObservableCollection<Student> { public List<Student> studentLis ...

  2. C# 学习笔记 多态(二)抽象类

    多态是类的三大特性之一,抽象类又是多态的实现方法之一.抽象类是什么呢,如果把虚方法比作一个盛有纯净水的杯子,那么此时的“纯净水”就是事先定义好的方法,我们可以根据不同的需求来改变杯子中所事先盛放的是“ ...

  3. MySQL问题记录——定义timestamp类型的数据

    MySQL问题记录——定义timestamp类型的数据 摘要:本文主要记录了在使用MySQL的过程中定义timestamp类型数据时遇到的问题以及解决方案. 问题重现 在Windows环境下安装MyS ...

  4. tkinter中的message

    from tkinter import * root =Tk() root.title("message练习") myText = "2019年12月13日,下午一个人, ...

  5. RPC 初识

    RPC是什么 RPC(Remote Procedure Call) 释义是远程过程调用,常存在于分布式系统中. 比如说现在有两台服务器A, B,一个在A服务器上的应用想要调用B服务器上的应用提供的某个 ...

  6. 9. [mmc subsystem] host(第三章)——sdhci-pltfm说明

    一.sdhci-pltfm说明 sdhci-pltfm并不是实际某个host的driver. sdhci-pltfm是指在sdhci core的基础上,提供了统一对sdhci_host的必要属性进行解 ...

  7. Python从零开始——集合Set

    一:Python集合知识概览 二:Python的特性.格式.以及各序列结构对比 三:Python集合set的创建 四:集合常用操作之——添加元素 五:集合常见操作之——删除元素 六:集合常见操作之—— ...

  8. 6、Routing

    Routing In the previous tutorial we built a simple logging system. We were able to broadcast log mes ...

  9. Delphi-面向对象

    1.面向过程2.基于对象3.面向对象 抽象:将同类事物向上抽取的过程 派生(继承): 编程中的继承指的是类和类之间的关系,称为派生. 封装:将不必要的暴漏的细节隐藏起来. 多态:一类事物以多种形态存在 ...

  10. JS高阶---浏览器内核

    不同浏览器的内核,不太一样 360双核切换机制 一般涉及到金钱交易时,会切换到Trident内核,因为IE内核安全性较稳 不涉及金钱利益时,则会使用webkit内核 (1)内核是由很多模块构成 注意: ...