spark学习(1)---dataframe操作大全
一、dataframe操作大全
https://blog.csdn.net/dabokele/article/details/52802150
https://www.jianshu.com/p/009126dec52f
增/删/改/查/合并/统计与数据处理: https://blog.csdn.net/sinat_26917383/article/details/80500349
spark左外连接:https://blog.csdn.net/iduanyingjie/article/details/57449539
structField、structType、schame:https://blog.csdn.net/legotime/article/details/52643243
dataframe、dataset、sql.dataframe:https://www.cnblogs.com/seaspring/p/5831677.html
创建dataframe:https://blog.csdn.net/shirukai/article/details/81085642
二、dataframe的filter用法
val df = sc.parallelize(Seq(("a", 1), ("a", 2), ("b", 2), ("b", 3), ("c", 1))).toDF("id", "num")
1、对整数类型过滤
(1)逻辑运算符:>, <, ===
df.filter($"num"===2)
df.filter($"num">2)
df.filter($"num"<2)
或者
df.filter("num=2")
df.filter("num>2")
df.filter("num<2")
(2)传递参数过滤
val ind:Int=2;
df.filter($"num"===ind)
df.filter($"num">ind)
df.filter($"num"<ind)
2、对字符串过滤
df.filter($"id".equalTo("a"))
(1)传递参数过滤
val str = s"a"
df.filter($"id"equalTo(str))
当dataframe没有字段名时,可以用默认的字段名[_1, _2, .....]来进行判断
3、多条件判断
逻辑连接符 &&(并)、||(或)
df.filter($"num"===2 && $"id".equalTo("a")
df.filter($"num"===1 || $"num"===3)
三、DataFrame和DataSet[T]无法使用map的问题:Unable to find encoder for type stored in a Dataset
spark2.0以后的版本采用的是新的分布式数据集DataSet,其中DataFrame是DataSet[Row]的别名形式。
DataSet数据集在使用sql()时,无法使用map,flatMap等转换算子的解决办法:https://blog.51cto.com/9269309/1954540
方法一:要想对dataset进行操作,需要进行相应的encode操作。要进行map操作,要先定义一个Encoder。特别是官网给的例子:
// No pre-defined encoders for Dataset[Map[K,V]], define explicitly
implicit val mapEncoder = org.apache.spark.sql.Encoders.kryo[Map[String, Any]]
// Primitive types and case classes can be also defined as
// implicit val stringIntMapEncoder: Encoder[Map[String, Any]] = ExpressionEncoder()
// row.getValuesMap[T] retrieves multiple columns at once into a Map[String, T]
teenagersDF.map(teenager => teenager.getValuesMap[Any](List("name", "age"))).collect()
// Array(Map("name" -> "Justin", "age" -> 19))
方法二:(不推荐这种方法)为了更简单一些,dataset也提供了转化RDD的操作。因此只需要将之前dataframe.map 在中间修改为:dataframe.rdd.map即可。
spark学习(1)---dataframe操作大全的更多相关文章
- Spark-SQL之DataFrame操作大全
Spark SQL中的DataFrame类似于一张关系型数据表.在关系型数据库中对单表或进行的查询操作,在DataFrame中都可以通过调用其API接口来实现.可以参考,Scala提供的DataFra ...
- spark 学习_rdd常用操作
[spark API 函数讲解 详细 ]https://www.iteblog.com/archives/1399#reduceByKey [重要API接口,全面 ] http://spark.apa ...
- spark学习常用的操作
首先,使用 ScalaIDE 或 IDEA 创建 Scala 的 Maven 工程.需要用到 spark-core,spark-sql,spark-streaming 的 jar 包,pom 文件如下 ...
- Spark RDD、DataFrame原理及操作详解
RDD是什么? RDD (resilientdistributed dataset),指的是一个只读的,可分区的分布式数据集,这个数据集的全部或部分可以缓存在内存中,在多次计算间重用. RDD内部可以 ...
- Spark Dataset DataFrame 操作
Spark Dataset DataFrame 操作 相关博文参考 sparksql中dataframe的用法 一.Spark2 Dataset DataFrame空值null,NaN判断和处理 1. ...
- 二、spark SQL交互scala操作示例
一.安装spark spark SQL是spark的一个功能模块,所以我们事先要安装配置spark,参考: https://www.cnblogs.com/lay2017/p/10006935.htm ...
- Spark学习之键值对(pair RDD)操作(3)
Spark学习之键值对(pair RDD)操作(3) 1. 我们通常从一个RDD中提取某些字段(如代表事件时间.用户ID或者其他标识符的字段),并使用这些字段为pair RDD操作中的键. 2. 创建 ...
- Spark学习之键值对操作总结
键值对 RDD 是 Spark 中许多操作所需要的常见数据类型.键值对 RDD 通常用来进行聚合计算.我们一般要先通过一些初始 ETL(抽取.转化.装载)操作来将数据转化为键值对形式.键值对 RDD ...
- Spark学习之路 (十八)SparkSQL简单使用
一.SparkSQL的进化之路 1.0以前: Shark 1.1.x开始: SparkSQL(只是测试性的) SQL 1.3.x: SparkSQL(正式版本)+Dataframe 1.5.x: S ...
随机推荐
- Matplotlib作图基础
折线图 import matplotlib.pylab as pylab import numpy as npy x=[1,2,3,4,8] y=[5,7,2,1,5] #折线图 pylab.plot ...
- Apache2.2安装
貌似Apache官网从2.2.X之后不再发布Windows安装版本,需要的话得自己编译 从官网下载2.2.25(我下了一个no-ssl的),安装提示 因为本机已经安装IIS,占用80端口,修改Apac ...
- exception log
except Exception as e: l = [str(i) for i in [dbid, f_mp3, e]] log_s = '||'.join(l) logging.exception ...
- Windows 平台上长路径名文件的解决方法
https://www.ibm.com/developerworks/cn/java/j-lo-longpath.html
- shell脚本自动更新git
gitpull.sh #!/bin/bash cd /home/wwwroot/default/mouse && git pull cd /home/wwwroot/default/s ...
- js二维数组定义和初始化的三种方法总结
js二维数组定义和初始化的三种方法总结 方法一:直接定义并且初始化,这种遇到数量少的情况可以用var _TheArray = [["0-1","0-2"],[& ...
- P1196 [NOI2002]银河英雄传说(并查集)
P1196 [NOI2002]银河英雄传说(并查集) 本题关键 用两个一维数组表示了一个稀疏的二维数组. 这两个一维数组一个表示祖先(就是最前面那个),一个表示距离祖先的距离. 并且还有一个关键点是, ...
- D1 模拟赛
T1 note 数组开小 菜的真实 60分 题目大意: 一个字符串 分成若干段 使每段内都没有重复的字符 求最少的段数 思路: 可以贪心 #include<iostream> #inclu ...
- 洛谷P2680 运输计划——树上差分
题目:https://www.luogu.org/problemnew/show/P2680 久违地1A了好高兴啊! 首先,要最大值最小,很容易想到二分: 判断当前的 mid 是否可行,需要看看有没有 ...
- RDA UMF进程 & UMF_IR.C 遥控处理
SIS架构图: SW Structure APP Event Flow :消息分发流程 UMF进程: int umf_main(int argc, char* argv[]) { umf_Init() ...