SparkSQL 内置函数的使用(JAVA与Scala版本)

SparkSQL 内置函数的使用(JAVA与Scala版本)

agg的使用(根据时间,去重id相同,统计相同时间内的id个数)

Scala版本!

package com.bynear.Scalaimport org.apache.spark.sql.functions._
import org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}
import org.apache.spark.sql.{Row, SQLContext}
import org.apache.spark.{SparkConf, SparkContext}
object SparkSQLAgg {def main(args: Array[String]) {val conf = new SparkConf().setMaster("local").setAppName("SparkSQLAgg")val sc = new SparkContext(conf)val sqlContext = new SQLContext(sc) //构建SQL上下文

    //要使用Spark SQL的内置函授,就一定要导入SQLContext下的隐式转换
    import sqlContext.implicits._val userAccessLog = Array("2016-3-27,1122",
      "2016-3-27,1122",
      "2016-3-27,1123",
      "2016-3-27,1124",
      "2016-3-27,1124",
      "2016-3-28,1122"
    )val userAccessRDDLog = sc.parallelize(userAccessLog, 5)val userAccessLogRowRDD = userAccessRDDLog.map { log => Row(log.split(",")(0), log.split(",")(1).toInt) }val structType = StructType(Array(StructField("date", StringType, true),
      StructField("userid", IntegerType, true)))val userAccessLogRowDF = sqlContext.createDataFrame(userAccessLogRowRDD, structType);


    userAccessLogRowDF.groupBy("date").agg('date, countDistinct('userid)).map {row => Row(row(1), row(2))}.collect().foreach(println)}
}
Java版本!

package com.bynear.spark_sql;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.sql.DataFrame;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
import org.apache.spark.sql.SQLContext;
import org.apache.spark.sql.types.DataTypes;
import org.apache.spark.sql.types.StructField;
import org.apache.spark.sql.types.StructType;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import static org.apache.spark.sql.functions.*;
//一定要引入:
//
//import static org.apache.spark.sql.functions.*;
//否则无法直接使用countDistinct函数。本人在这里也是折腾了很久,最后查官网才发现这个坑的。
public class agg {public static void main(String[] args) {SparkConf conf = new SparkConf().setAppName("agg").setMaster("local");
        JavaSparkContext sc = new JavaSparkContext(conf);
        SQLContext sqlContext = new SQLContext(sc);
        List<String> list = Arrays.asList("2016-3-27,1122",
                "2016-3-27,1122",
                "2016-3-27,1123",
                "2016-3-27,1124",
                "2016-3-27,1124",
                "2016-3-28,1122"
        );
        JavaRDD<String> userAccessRDDLog = sc.parallelize(list, 5);
        JavaRDD<Row> mapROWRDD = userAccessRDDLog.map(new Function<String, Row>() {@Override
            public Row call(String line) throws Exception {String[] LineSplit = line.split(",");
                return RowFactory.create(LineSplit[0], Integer.valueOf(LineSplit[1]));
            }});
        ArrayList<StructField> fields = new ArrayList<StructField>();
        fields.add(DataTypes.createStructField("date", DataTypes.StringType, true));
        fields.add(DataTypes.createStructField("userid", DataTypes.IntegerType, true));
        StructType structType = DataTypes.createStructType(fields);
        DataFrame userAccessLogRowDF = sqlContext.createDataFrame(mapROWRDD, structType);
        userAccessLogRowDF.groupBy("date").agg(max("userid")).show();


        sc.close();
    }
}
注意点:::

Scala版本中,如果需要使用内置函数,必须引用

import org.apache.spark.sql.functions._
Java版本,如果使用内置函数的话,必须引用

import static org.apache.spark.sql.functions.*;
必须为static 静态的  才可以使用其中的方法!




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/326084.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式统一配置平台-Disconf.Net

为了更好的解决分布式环境下多台服务实例的配置统一管理问题&#xff0c;本文提出了一套完整的分布式配置管理解决方案。结合.net项目具体情况&#xff0c;实现了配置发布的统一化&#xff0c;对配置进行持久化管理并对外提供restful接口&#xff0c;在此基础上&#xff0c;基于…

计算机软件录音注意事项,GOLDWAVE录音软件使用教程

很多朋友都有录音软件&#xff0c;但是软件功能不全&#xff0c;也不是专业的&#xff0c;所以现在我讲一个专业的软件&#xff0c;这个软件都是原创歌手比较常用的软件&#xff0c;现在我们来学习一下。这是该软件的界面&#xff0c;软件的名字叫做GOLDWAVE这款软件的功能很强…

第二章 变量、数据类型和运算符

一、变量&#xff1a; 1.根据数据类型在内存中分配一个合适的空间并给他命名&#xff0c;即“变量名” 2.将数据存储到这个空间中&#xff0c; 3.从空间中取出数据&#xff0c;可以使用变量名来获得。 二、java中的数据类型 数据类型&#xff1a; 1.数值类型 &#xff08;1&…

这些棘手的Java面试题,答案你都知道吗?

转载自 这些棘手的Java面试题&#xff0c;答案你都知道吗&#xff1f; 棘手的Java面试问题是那些有一些惊喜元素的问题。如果你试图用常识回答一个棘手的问题&#xff0c;你很可能会因为需要一些特定的知识而失败。大多数棘手的Java问题来自于令人困惑的概念&#xff0c;如函…

Spark SQL 开窗函数row_number的使用

Spark SQL 开窗函数row_number的使用 窗口函数 row_number即为分组取topN参考文本&#xff1a; 型号 类别 销售量/月小米,手机,250 华为,手机,450 苹果,手机,1000 三星,手机,2500 小米Pro,笔记本,1500 苹果Pro,笔记本,2000 …

2016蓝桥杯省赛---java---A---10(压缩转换)

题目描述 小明最近在研究压缩算法。 他知道&#xff0c;压缩的时候如果能够使得数值很小&#xff0c;就能通过熵编码得到较高的压缩比。 然而&#xff0c;要使数值很小是一个挑战。 最近&#xff0c;小明需要压缩一些正整数的序列&#xff0c;这些序列的特点是&#xff0c;后面…

jquery选择器案例分享

其中选择器都已经注释&#xff0c;需要测试哪个打开注释即可观察效果&#xff01;&#xff01; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><script type"text/javascript" src"js/j…

量子计算机对人类长寿,科学家称“极端长寿”在未来几十年可能会达到新的里程碑...

原标题&#xff1a;科学家称“极端长寿”在未来几十年可能会达到新的里程碑 来源&#xff1a;cnBeta.COM据外媒报道&#xff0c;人们的平均寿命越来越长&#xff0c;而经历“极端长寿”的人的数量也同样在增加。尽管大多数人活不到100岁&#xff0c;但数据显示&#xff0c;在过…

.NET Framework 4.7发布,支持Windows 10创作者更新

微软刚刚发布了 .NET Framework 4.7&#xff0c;主要是带来了对 Windows 10 “创作者更新” 的支持&#xff0c;开发者们可以通过 Visual Studio 2017 进行最新版 .NET Framework 项目的开发。 .NET Framework 4.7 包含了以下几大改进&#xff1a; 加入对 Windows 10 表格应用…

Spark SQL 中UDF的讲解

Spark SQL 中UDF的讲解 User Define Function, 用户自定义函数,简称UDF,存在与很多组件中。 在使用Sparksql的人都遇到了Sparksql所支持的函数太少了的难处&#xff0c;除了最基本的函数&#xff0c;Sparksql所能支撑的函数很少&#xff0c;肯定不能满足正常的项目使用&#xf…

Redis面试总结

转载自 Redis面试总结 1、什么是Redis? Redis 是一个基于内存的高性能key-value数据库。 (有空再补充&#xff0c;有理解错误或不足欢迎指正) 2、Reids有哪些特点&#xff1f; Redis本质上是一个Key-Value类型的内存数据库&#xff0c;很像memcached&#xff0c;整个数据…

jquery动画与事件案例

代码都已经测试通过&#xff0c;直接打开注释即可看见效果&#xff01; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><script src"js/jquery-1.8.3.js" type"text/javascript" c…

两路语音 两路计算机数据综合,脉冲编码调制解调实验摘要.doc

2012-2013 第二学期开放实验项目题  目&#xff1a;两路话音&#xff0b;两路计算机数据综合传输系统实验学生姓名专业名称&#xff1a;  电子信息工程指导教师&#xff1a;2013年 5月 20日脉冲编码调制解调实验实验原理(一)基本原理PCM 调制原理框图量化从数学上来看&…

2016蓝桥杯省赛---java---C---10(密码脱落)

题目描述 思路分析 将字符串反转&#xff0c;后寻找到最长子串&#xff0c;然后用字符串长度减去最长字串长度即可。 代码实现 package lanqiao;import java.util.Scanner;public class Main {static int min0,num0;static String str;public static void main(String[] arg…

Java多线程面试问题

转载自 Java多线程面试问题 这篇文章主要是对多线程的面试问题进行总结的&#xff0c;罗列了40个多线程的问题。 1、多线程有什么用&#xff1f; 一个可能在很多人看来很扯淡的一个问题&#xff1a;我会用多线程就好了&#xff0c;还管它有什么用&#xff1f;在我看来&…

Spark SQL UDF2的使用

Spark SQL UDF2的使用继续之前的UDF1进行说明&#xff1a;UDF1博客地址点击打开链接与UDF1的区别在于两个参数&#xff1a;需求&#xff1a; 获取文本中的两个数字 计算每行中数字的和文本&#xff1a;1,1 2,2 3,3 4,4 5,5 6,6 7,7 8,8 9,9 10,10代码&#xff1a;package com.…

使用ElasticSearch,Kibana,ASP.NET Core和Docker可视化数据

原文地址&#xff1a;http://www.dotnetcurry.com/aspnet/1354/elastic-search-kibana-in-docker-dotnet-core-app 想要轻松地通过许多不同的方式查询数据&#xff0c;甚至是从未预料到的方式&#xff1f;想要以多种方式可视化日志&#xff1f;同时支持基于时间、文本和其他类…

计算机辐射对人体影响吗,电脑屏幕辐射对人体的危害怎么解决?

现在不光是从事IT职业的人经常用电脑&#xff0c;普通打工族也时常接触电脑&#xff0c;人们用电脑的时间越来越多&#xff0c;电脑屏幕带来的辐射问题随之而来&#xff0c;工作上班用电脑&#xff0c;下班回家看电视剧、打游戏也用电脑&#xff0c;KTV点歌也用触摸屏辐射&…

第二章jQuery选择器

一、jquery选择器的分类&#xff1a; 1.基本选择器 &#xff08;1&#xff09;标签选择器 $(“h2”).css(“color”,“red”); &#xff08;2&#xff09;类选择器 $(".title").css(“color”,“red”); &#xff08;3&#xff09;ID选择器 $("#title").cs…

2017蓝桥杯省赛---java---A---4(方格分割)

题目描述 思路分析 dfs 题目要求沿着格子的边线剪成两个部分&#xff0c;仔细观察&#xff0c;剪开的边线是关于中心点&#xff08;3&#xff0c;3&#xff09;对称的&#xff0c;于是我们从&#xff08;3&#xff0c;3&#xff09;开始搜索&#xff0c;直到搜到边界则退出。…