一、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操作大全的更多相关文章

  1. Spark-SQL之DataFrame操作大全

    Spark SQL中的DataFrame类似于一张关系型数据表.在关系型数据库中对单表或进行的查询操作,在DataFrame中都可以通过调用其API接口来实现.可以参考,Scala提供的DataFra ...

  2. spark 学习_rdd常用操作

    [spark API 函数讲解 详细 ]https://www.iteblog.com/archives/1399#reduceByKey [重要API接口,全面 ] http://spark.apa ...

  3. spark学习常用的操作

    首先,使用 ScalaIDE 或 IDEA 创建 Scala 的 Maven 工程.需要用到 spark-core,spark-sql,spark-streaming 的 jar 包,pom 文件如下 ...

  4. Spark RDD、DataFrame原理及操作详解

    RDD是什么? RDD (resilientdistributed dataset),指的是一个只读的,可分区的分布式数据集,这个数据集的全部或部分可以缓存在内存中,在多次计算间重用. RDD内部可以 ...

  5. Spark Dataset DataFrame 操作

    Spark Dataset DataFrame 操作 相关博文参考 sparksql中dataframe的用法 一.Spark2 Dataset DataFrame空值null,NaN判断和处理 1. ...

  6. 二、spark SQL交互scala操作示例

    一.安装spark spark SQL是spark的一个功能模块,所以我们事先要安装配置spark,参考: https://www.cnblogs.com/lay2017/p/10006935.htm ...

  7. Spark学习之键值对(pair RDD)操作(3)

    Spark学习之键值对(pair RDD)操作(3) 1. 我们通常从一个RDD中提取某些字段(如代表事件时间.用户ID或者其他标识符的字段),并使用这些字段为pair RDD操作中的键. 2. 创建 ...

  8. Spark学习之键值对操作总结

    键值对 RDD 是 Spark 中许多操作所需要的常见数据类型.键值对 RDD 通常用来进行聚合计算.我们一般要先通过一些初始 ETL(抽取.转化.装载)操作来将数据转化为键值对形式.键值对 RDD ...

  9. Spark学习之路 (十八)SparkSQL简单使用

    一.SparkSQL的进化之路 1.0以前: Shark 1.1.x开始: SparkSQL(只是测试性的)  SQL 1.3.x: SparkSQL(正式版本)+Dataframe 1.5.x: S ...

随机推荐

  1. Matplotlib作图基础

    折线图 import matplotlib.pylab as pylab import numpy as npy x=[1,2,3,4,8] y=[5,7,2,1,5] #折线图 pylab.plot ...

  2. Apache2.2安装

    貌似Apache官网从2.2.X之后不再发布Windows安装版本,需要的话得自己编译 从官网下载2.2.25(我下了一个no-ssl的),安装提示 因为本机已经安装IIS,占用80端口,修改Apac ...

  3. exception log

    except Exception as e: l = [str(i) for i in [dbid, f_mp3, e]] log_s = '||'.join(l) logging.exception ...

  4. Windows 平台上长路径名文件的解决方法

    https://www.ibm.com/developerworks/cn/java/j-lo-longpath.html

  5. shell脚本自动更新git

    gitpull.sh #!/bin/bash cd /home/wwwroot/default/mouse && git pull cd /home/wwwroot/default/s ...

  6. js二维数组定义和初始化的三种方法总结

    js二维数组定义和初始化的三种方法总结 方法一:直接定义并且初始化,这种遇到数量少的情况可以用var _TheArray = [["0-1","0-2"],[& ...

  7. P1196 [NOI2002]银河英雄传说(并查集)

    P1196 [NOI2002]银河英雄传说(并查集) 本题关键 用两个一维数组表示了一个稀疏的二维数组. 这两个一维数组一个表示祖先(就是最前面那个),一个表示距离祖先的距离. 并且还有一个关键点是, ...

  8. D1 模拟赛

    T1 note 数组开小 菜的真实 60分 题目大意: 一个字符串 分成若干段 使每段内都没有重复的字符 求最少的段数 思路: 可以贪心 #include<iostream> #inclu ...

  9. 洛谷P2680 运输计划——树上差分

    题目:https://www.luogu.org/problemnew/show/P2680 久违地1A了好高兴啊! 首先,要最大值最小,很容易想到二分: 判断当前的 mid 是否可行,需要看看有没有 ...

  10. RDA UMF进程 & UMF_IR.C 遥控处理

    SIS架构图: SW Structure APP Event Flow :消息分发流程 UMF进程: int umf_main(int argc, char* argv[]) { umf_Init() ...