DataFrameNaFunctions用来对DataFrame中值为null或NaN的列做处理,处理分为三种类型:

drop:根据条件丢弃含有null或NaN的行

fill:根据条件使用指定值填充值为null或NaN的列,相当于设置默认值

replace:根据条件替换列值

下面是针对每种处理方式的详细解释:

package cc11001100.spark.dataset.DataFrameNaFunctionsDemo;

import com.google.common.collect.ImmutableMap;
import org.apache.spark.sql.DataFrameNaFunctions;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.catalyst.encoders.RowEncoder;
import org.apache.spark.sql.types.DataTypes;
import org.apache.spark.sql.types.StructField; import java.util.ArrayList;
import java.util.List; /**
* DataFrameNaFunctions对空值的处理主要有三种:
* drop
* fill
* replace
*
* @author CC11001100
*/
public class DataFrameNaFunctionsDemo { private static Integer randomValue(int n) {
if (Math.random() < 0.5) {
return n;
} else {
return null;
}
} public static void main(String[] args) {
SparkSession spark = SparkSession.builder().master("local[*]").getOrCreate(); List<Row> rowList = new ArrayList<>();
for (int i = 0; i < 100; i++) {
Row row = RowFactory.create(randomValue(i), randomValue(i));
rowList.add(row);
}
Dataset<Row> nums = spark.createDataset(rowList, RowEncoder.apply(DataTypes.createStructType(new StructField[]{
DataTypes.createStructField("col_1", DataTypes.IntegerType, true),
DataTypes.createStructField("col_2", DataTypes.IntegerType, true),
})));
nums.show(false);
DataFrameNaFunctions dataFrameNaFunctions = nums.na(); /*----------------------------- drop -------------------------------*/ // 只要某行中有一列是null或NaN即丢掉此行数据,内部调用了drop("any")
dataFrameNaFunctions.drop().show();
// 指定丢弃行的方式,any表示行中任意一列是null或NaN即丢弃此行,all表示此行中所有列都是null或NaN才丢弃此行
dataFrameNaFunctions.drop("any").show();
// 当某行中的所有列为null或NaN时丢弃掉此行
dataFrameNaFunctions.drop("all").show();
// 当某行的指定列为null或any时丢弃掉此行
dataFrameNaFunctions.drop(new String[]{"col_1", "col_2"}).show();
// 当某行的指定列任意一个为null或NaN时丢弃掉此行
dataFrameNaFunctions.drop("any", new String[]{"col_1", "col_2"}).show();
// 当某行的指定列全部为null或NaN时丢弃掉此行
dataFrameNaFunctions.drop("all", new String[]{"col_1", "col_2"}).show();
// 当某行中指定列为null或NaN的数量大于指定值时丢弃掉此行
dataFrameNaFunctions.drop(1).show();
dataFrameNaFunctions.drop(1, new String[]{"col_1", "col_2"}).show(); /*----------------------------- fill -------------------------------*/ // 使用指定的值填充所有为null或NaN的列s,相当于为所有null或NaN设置默认值
dataFrameNaFunctions.fill(1L).show();
dataFrameNaFunctions.fill(0.1).show();
dataFrameNaFunctions.fill("").show();
dataFrameNaFunctions.fill(true).show(); // 当给定的列出现null或NaN值时使用对应值填充,相当于为指定的列设置默认值
dataFrameNaFunctions.fill(1L, new String[]{"col_1, col_2"}).show();
dataFrameNaFunctions.fill(0.1, new String[]{"col_1, col_2"}).show();
dataFrameNaFunctions.fill("", new String[]{"col_1, col_2"}).show();
dataFrameNaFunctions.fill(true, new String[]{"col_1, col_2"}).show(); // 传入Map可以为每一列设置不同的值,map的key为列名,值为当key列为null或NaN时要填充的值
// 要填充的值必须是下列类型之一: `Integer`, `Long`, `Float`, `Double`, `String`, `Boolean`.
dataFrameNaFunctions.fill(ImmutableMap.of("col_1", "unknown", "col_2", 1.0)).show(); /*----------------------------- replace -------------------------------*/ // 当指定列的值为key时,将其替换为value
dataFrameNaFunctions.replace("col_1", ImmutableMap.of("UNKNOWN", "unnamed")).show();
dataFrameNaFunctions.replace(new String[]{"col_1", "col_2"}, ImmutableMap.of("UNKNOWN", "unnamed")).show(); } }

相关资料:

1. Class DataFrameNaFunctions - spark doc

.

Spark笔记之DataFrameNaFunctions的更多相关文章

  1. spark笔记 环境配置

    spark笔记 spark简介 saprk 有六个核心组件: SparkCore.SparkSQL.SparkStreaming.StructedStreaming.MLlib,Graphx Spar ...

  2. 大数据学习——spark笔记

    变量的定义 val a: Int = 1 var b = 2 方法和函数 区别:函数可以作为参数传递给方法 方法: def test(arg: Int): Int=>Int ={ 方法体 } v ...

  3. spark 笔记 16: BlockManager

    先看一下原理性的文章:http://jerryshao.me/architecture/2013/10/08/spark-storage-module-analysis/ ,http://jerrys ...

  4. spark 笔记 15: ShuffleManager,shuffle map两端的stage/task的桥梁

    无论是Hadoop还是spark,shuffle操作都是决定其性能的重要因素.在不能减少shuffle的情况下,使用一个好的shuffle管理器也是优化性能的重要手段. ShuffleManager的 ...

  5. spark 笔记 14: spark中的delay scheduling实现

    延迟调度算法的实现是在TaskSetManager类中的,它通过将task存放在四个不同级别的hash表里,当有可用的资源时,resourceOffer函数的参数之一(maxLocality)就是这些 ...

  6. spark 笔记 12: Executor,task最后的归宿

    spark的Executor是执行task的容器.和java的executor概念类似. ===================start executor runs task============ ...

  7. spark 笔记 11: SchedulingAlgorithm 两种调度算法的优先级比较

    调度算法的最基本工作之一,就是比较两个可执行的task的优先级.spark提供的FIFO和FAIR的优先级比较在SchedulingAlgorithm这个接口体现.) { ) { ) { ) { fa ...

  8. spark 笔记 10: TaskScheduler相关

    任务调度器的接口类.应用程序可以定制自己的调度器来执行.当前spark只实现了一个任务调度器) )))))val createTime = System.currentTimeMillis()clas ...

  9. spark 笔记 8: Stage

    Stage 是一组独立的任务,他们在一个job中执行相同的功能(function),功能的划分是以shuffle为边界的.DAG调度器以拓扑顺序执行同一个Stage中的task. /** * A st ...

随机推荐

  1. Android 公共库的建立方法

    本文主要介绍在android工程中如何将共用代码建成公共包方便其他工程引用.引用后的工程结构分析.library引入方式的优缺点. 自己也写了一些android公共的库,有兴趣的可以参考 Trinea ...

  2. 20135220谈愈敏Blog1_计算机是如何工作的

    计算机是如何工作的 存储程序计算机工作模型 冯诺依曼体系结构 从硬件角度来看:CPU和内存,由总线连接,CPU中有一个名为IP的寄存器,总是指向内存的某一块:CS,代码段,执行命令时就取IP指向的一条 ...

  3. 20135234mqy-——信息安全系统设计基础第十四周学习总结

    第九章 虚拟存储器 主要作用: 将主存看作是一个存储在磁盘上的地址空间的高速缓存,在主存中只保护活动的区域,并根据需要在磁盘和主存之间来回传送数据: 为每个进程提供了一致的地址空间,从而简化了存储器管 ...

  4. 《Linux内核分析》第一周——计算机是如何工作的?

    杨舒雯 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 课程内容 1.诺曼依体系 ...

  5. C++:钻石继承与虚继承

    QUESTION:什么是钻石继承? ANSWER:假设我们已经有了两个类Father1和Father2,他们都是类GrandFather的子类.现在又有一个新类Son,这个新类通过多继承机制对类Fat ...

  6. Postgresql 简单安装过程. Study From https://www.cnblogs.com/stulzq/p/7766409.html

    CentOS 下面安装 Postgresql. 的简要学习记录 1. 卸载CentOS上面自带的postgresql版本 rpm -e $(rpm -qa|grep postgre) 2. postg ...

  7. Windows 下 Docker 的简单学习使用过程之一 dockertoolbox

    1. Windows 下面运行 Docker 的两个主要工具1): Docker for Windows2): DockerToolbox区别:Docker For Windows 可以理解为是新一代 ...

  8. ehcache、redis应用场景比较

    应用场景: ehcache是Hibernate中默认的CacheProvider,直接在jvm虚拟机中缓存,速度快,效率高:但是缓存共享麻烦,集群分布式应用不方便.  . 缓存数据有两级:内存和磁盘, ...

  9. Ubuntu17安装MySql5.7

    安装: sudo apt-get update sudo apt-get install mysql-server 配置远程访问: vi /etc/mysql/mysql.conf.d/mysqld. ...

  10. 洛谷P13445 [USACO5.4]奶牛的电信Telecowmunication(网络流)

    题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成的序列a1,a2,...,a(c),且a1与a2相 ...