Spark DataFrame sql使用记录(持续更新)

以前用sql操作DataFrame时,大都在代码上注释。注释太多会乱,并且时间久了后就算看注释,也没多大“兴趣”。这里记录每一次新遇见的需求,以及代码。

Spark-shell中使用

2018/4/12

  • export SPARK_MAJOR_VERSION=2【ambari中装有两个版本的spark】
  • import org.apache.spark.sql.SparkSession
  • val spark = SparkSession.builder().master(“local”).appName(“dataConvert”).getOrCreate()
  • import spark.implicits._【导入隐式转换】

Sql使用记录

2018/4/12

某字段分组并排序

/**
等价sql:
select table_id , count(*) AS count_tableId from table
group by table_id
order by count_tableId desc
*/
val groupByAndSort = rawDf.groupBy("table_id").count().withColumnRenamed("count", "count_tableId").sort($"count_tableId".desc)

这里写图片描述

两表关联查询,找出重复id

val rawDf1 = spark.read.format("csv").option("header", true).load("file:XXXX.csv")
val rawDf2 = spark.read.format("csv").option("header", true).load("file:XXXX.csv")
rawDf1.createOrReplaceTempView("info1")
rawDf2.createOrReplaceTempView("info2")
  • 1.rawDf1.join(rawDf2,"table_id").show
    这里写图片描述
  • 2.spark.sql("SELECT info1.table_id FROM info1,info2 where info1.table_id=info2.table_id").distinct().show
    这里写图片描述

两表关联查询,找出A中id在B中也有的那些数据

intersect方法可以计算出两个DataFrame中相同的记录【但是不满足我的需求】
val union = rawDf1.join(rawDf2,"vid")
join的列只会出现一次

结果保存

DataFrameName.coalesce(1)
.write
.mode(“overwrite”)
.option(“header”, true)
.format(“csv”)
.save(resultPath)

2018/4/13

计算出某列均值,并且取出

for (i <- 1 until columnNames.length) { var fill: Double = trainDf.agg(columnNames(i) -> "avg").first().getDouble(0) trainDf = trainDf.withColumn(columnNames(i), col(columnNames(i)).cast(DoubleType)).na.fill(fill) }

报错记录

1.java.io.FileNotFoundException: /tmp/xxxxxxx (Too many open files)
vi /etc/security/limits.conf
末尾添加
【最初其实我修改过这两个值:最大读取文件数和最大线程数;但是用户不是*,是elasticsearch】

* - nofile 65536
* - nproc 2048

2018/4/14

2.**java.lang.StackOverflowError **
堆栈溢出错误
未解决,莫名其妙的自动好了

3.org.codehaus.janino.JaninoRuntimeException: Code of method “processNext()V” of class “org.apache.spark.sql.catalyst.expressions.GeneratedClass$GeneratedIterator” grows beyond 64 KB
未解决
报错但程序正确运行结束。满脸问号。。。




文章的不妥之处,欢迎各位前辈斧正!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值