Spark复习(一)电光火石间体验Spark2.x开发

java Tuple2 maptopair lambda import org.apache.spark.api.java.JavaPairRDD; import org.apache.spark.api.java.JavaSparkContext; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.SparkConf; import org.apache.spark.api.java.function.PairFunction; import scala.Tuple2... 阅读详情

直接上数据格式、问题、代码。先按照Java来复习下。复习完再复习Scala

一、数据准备、格式介绍.

1、评分数据。数据为 UserId::MovieId::Rating::timestamp.  文件名rating.bat

1::1193::5::978300760
1::661::3::978302109
1::914::3::978301968
1::3408::4::978300275

2、电影数据。数据为 MovieID::Title::Gengres

1::Toy Story (1995)::Animation|Children's|Comedy
2::Jumanji (1995)::Adventure|Children's|Fantasy
3::Grumpier Old Men (1995)::Comedy|Romance
4::Waiting to Exhale (1995)::Comedy|Drama

3、用户数据。数据为 UserId::Gender::Age::Occupation::Zip-code

1::F::1::10::48067
2::M::56::16::70072
3::M::25::15::55117
4::M::45::7::02460
5::M::25::20::55455
6::F::50::9::55117

二、解决问题

1、打印所有电影中评分最高的前十个电影名和平均分。

解答代码:(测试完毕)

/**
 * 电光火石体验Spark
 * 1、所有电影中评分最高的前十名
 * 2、前十名的平均评分
 * 3、带出电影名字
 */
public class Spark_Analyzer {

    public static void main(String[] args) {

        String basicPath = "spark-demo/src/main/resources/";
        SparkConf sparkConf = new SparkConf();
        sparkConf.setMaster("local");
        sparkConf.setAppName("Spark_Analyzer");
        sparkConf.set("spark.testing.memory", "2147480000");
        JavaSparkContext javaSparkContext = new JavaSparkContext(sparkConf);
        javaSparkContext.setLogLevel("trace");
        JavaRDD<String> userRdd = javaSparkContext.textFile(basicPath + "users.dat");
        JavaRDD<String> moviesRdd = javaSparkContext.textFile(basicPath + "movies.dat", 3);
        JavaRDD<String> ratingsRdd = javaSparkContext.textFile(basicPath + "ratings.dat", 3);


        JavaPairRDD<String, String> movieCache = moviesRdd.mapToPair(line -> new Tuple2(line.split("::")[0], line.split("::")[1])).cache();

        JavaPairRDD<String, Integer> avgRatings = ratingsRdd.mapToPair(new PairFunction<String, String, Tuple2<String, Integer>>() {
            @Override
            public Tuple2<String, Tuple2<String, Integer>> call(String line) throws Exception {
                String[] split = line.split("::");
                return new Tuple2(split[1], new Tuple2(split[2], 1));
            }
        }).reduceByKey(new Function2<Tuple2<String, Integer>, Tuple2<String, Integer>, Tuple2<String, Integer>>() {
            @Override
            public Tuple2<String, Integer> call(Tuple2<String, Integer> t1, Tuple2<String, Integer> t2) throws Exception {
                Integer rating = Integer.parseInt(t1._1.toString()) + Integer.parseInt(t2._1.toString());
                int num = t1._2 + t2._2;
                return new Tuple2(rating.toString(), num);
            }
        }).mapToPair(new PairFunction<Tuple2<String, Tuple2<String, Integer>>, String, Integer>() {

            @Override
            public Tuple2<String, Integer> call(Tuple2<String, Tuple2<String, Integer>> item) throws Exception {
                Integer rating = Integer.parseInt(item._2._1);
                int rangeRat = rating / item._2._2;
                String movieId = item._1;
                return new Tuple2(movieId, rangeRat);
            }
        });
        List<Tuple2<Integer, String>> top = avgRatings.join(movieCache).mapToPair(new PairFunction<Tuple2<String, Tuple2<Integer, String>>, Integer, String>() {

            @Override
            public Tuple2<Integer, String> call(Tuple2<String, Tuple2<Integer, String>> item) throws Exception {
                return new Tuple2(item._2._1, item._2._2);
            }
        }).sortByKey(false).take(10);
        top.stream().forEach(t -> {
            System.out.println("movieId" + t._2 + "   avg: " + t._1);
        });
        javaSparkContext.close();
    }
}

附一份Maven依赖:

<properties>
        <spark.version>2.4.3</spark.version>
        <scala.version>2.11</scala.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_${scala.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-streaming_${scala.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_${scala.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-hive_${scala.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-mllib_${scala.version}</artifactId>
            <version>${spark.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>0.98.12-hadoop2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-server</artifactId>
            <version>0.98.12-hadoop2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-mapreduce-client-core</artifactId>
            <version>2.6.5</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>2.6.5</version>
        </dependency>

        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.6.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-protocol</artifactId>
            <version>1.2.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-shaded-client</artifactId>
            <version>1.2.6</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-hdfs</artifactId>
            <version>2.6.5</version>
        </dependency>

    </dependencies>

2、最受男生喜欢的Top10电影,最受女生喜欢的top10电影。(只写下女生的topN 数据中F代表女生) 经测试ok

/**
 * 1、在原来基础上join User数据。洗出性别
 * 2、topn
 * 3、组成对象的部分用TupleN更好
 */
public class Spark_Analyzer_Gender {

    public static void main(String[] args) {

        SparkConf sparkConf = new SparkConf().setMaster("local").setAppName("Spark_Analyzer_Gender").set("spark.testing.memory", "2147480000");
        JavaSparkContext javaSparkContext = new JavaSparkContext(sparkConf);
        javaSparkContext.setLogLevel("trace");
        String basicPath = "spark-demo/src/main/resources/";
        JavaRDD<String> userRdd = javaSparkContext.textFile(basicPath + "users.dat");
        JavaRDD<String> moviesRdd = javaSparkContext.textFile(basicPath + "movies.dat", 3);
        JavaRDD<String> ratingsRdd = javaSparkContext.textFile(basicPath + "ratings.dat", 3);
        JavaPairRDD<String, String> userCache = userRdd.mapToPair(new PairFunction<String, String, String>() {

            @Override
            public Tuple2<String, String> call(String line) throws Exception {
                String[] split = line.split("::");
                String userId = split[0];
                String gender = split[1];
                return new Tuple2<>(userId, gender);
            }
        }).cache();
        JavaPairRDD<String, String> movieCache = moviesRdd.mapToPair(new PairFunction<String, String, String>() {

            @Override
            public Tuple2<String, String> call(String line) throws Exception {
                String[] split = line.split("::");
                String movieId = split[0];
                String movieName = split[1];
                return new Tuple2(movieId, movieName);
            }
        }).cache();
        List<Tuple2<Integer, Object>> result = ratingsRdd.mapToPair(new PairFunction<String, String, Rating>() {

            @Override
            public Tuple2<String, Rating> call(String line) throws Exception {
                String[] split = line.split("::");
                String userId = split[0];
                String movieId = split[1];
                Integer rating = Integer.parseInt(split[2]);
                Long timestamp = Long.parseLong(split[3]);
                Rating ratingObj = new Rating(userId, movieId, rating, timestamp);
                return new Tuple2(userId, ratingObj);
            }
        }).join(userCache).filter(new Function<Tuple2<String, Tuple2<Rating, String>>, Boolean>() {
            @Override
            public Boolean call(Tuple2<String, Tuple2<Rating, String>> item) throws Exception {
                return item._2._2.equals("F");
            }
        }).mapToPair(new PairFunction<Tuple2<String, Tuple2<Rating, String>>, String, Tuple2<Integer, Integer>>() {
            @Override
            public Tuple2<String, Tuple2<Integer, Integer>> call(Tuple2<String, Tuple2<Rating, String>> item) throws Exception {
                Rating rating = item._2._1;
                String gender = item._2._2;
                return new Tuple2(rating.getMovieId(), new Tuple2<>(rating.getRating(), 1));
            }
        }).reduceByKey(new Function2<Tuple2<Integer, Integer>, Tuple2<Integer, Integer>, Tuple2<Integer, Integer>>() {
            @Override
            public Tuple2<Integer, Integer> call(Tuple2<Integer, Integer> item1, Tuple2<Integer, Integer> item2) throws Exception {
                int ratingSum = item1._1 + item2._1;
                int count = item1._2 + item2._2;
                return new Tuple2(ratingSum, count);
            }
        }).mapToPair(new PairFunction<Tuple2<String, Tuple2<Integer, Integer>>, String, Tuple2<Integer, Integer>>() {

            @Override
            public Tuple2<String, Tuple2<Integer, Integer>> call(Tuple2<String, Tuple2<Integer, Integer>> item) throws Exception {
                return new Tuple2(item._1, new Tuple2(item._2._1 / item._2._2, item._2._1));
            }
        }).join(movieCache).mapToPair(new PairFunction<Tuple2<String, Tuple2<Tuple2<Integer, Integer>, String>>, Integer, Object>() {

            @Override
            public Tuple2<Integer, Object> call(Tuple2<String, Tuple2<Tuple2<Integer, Integer>, String>> item) throws Exception {
                String movieId = item._1;
                String movieName = item._2._2;
                Tuple2<Integer, Integer> data = item._2._1;
                Integer avg = data._1;
                Integer sum = data._1;
                return new Tuple2(avg, movieName);
            }
        }).sortByKey(false).take(10);

        result.stream().forEach(t -> {
            System.out.println("movie : " + t._2 + "  avg : " + t._1);
        });
    }
}

3、关于二次排序

/**
 * Java版二次排序
 */
public class Spark_Analyzer_Sort {

    public static void main(String[] args) {

        SparkConf sparkConf = new SparkConf().setMaster("local").setAppName("Spark_Analyzer_Gender").set("spark.testing.memory", "2147480000");
        JavaSparkContext javaSparkContext = new JavaSparkContext(sparkConf);
        javaSparkContext.setLogLevel("trace");
        String basicPath = "spark-demo/src/main/resources/";
        JavaRDD<String> userRdd = javaSparkContext.textFile(basicPath + "users.dat");
        JavaRDD<String> moviesRdd = javaSparkContext.textFile(basicPath + "movies.dat", 3);
        JavaRDD<String> ratingsRdd = javaSparkContext.textFile(basicPath + "ratings.dat", 3);
        List<Tuple2<Rating, String>> data = ratingsRdd.mapToPair(new PairFunction<String, Rating, String>() {

            @Override
            public Tuple2<Rating, String> call(String line) throws Exception {
                String[] split = line.split("::");
                String userId = split[0];
                String movieId = split[1];
                Integer rating = Integer.parseInt(split[2]);
                Long timestamp = Long.parseLong(split[3]);
                Rating data = new Rating(userId, movieId, rating, timestamp);
                return new Tuple2(data, movieId);
            }
        }).sortByKey(false).take(10);
        data.stream().forEach(t -> {
            System.out.println("movieId : " + t._2 + " data : " +  t._1);
        });
    }
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Rating implements Comparable, Serializable {
    private String userId;
    private String movieId;
    private Integer rating;
    private Long timestamp;

    @Override
    public int compareTo(Object o) {

        Rating tmp = (Rating)o;
        int i = this.rating.compareTo(tmp.getRating());
        if(i == 0){
            return this.timestamp.compareTo(tmp.getTimestamp());
        }
        return i;
    }
}

 

windows10下spark2.3.0本地开发环境搭建-亲测 windows10下spark2.3.0本地开发环境搭建 win10上部署Hadoop非Cygwin、非虚拟机方式。安装目录为D:\setupedsoft。涉及相关组件版本: win10 家庭装,64位,x86处理器 JDK1.8.0_171 hadoop-2.7.6 Spark-2.3.0 Scala-2.11.8 Maven-3.5.3 ideaIC-2018.1.4.exe spark-2.3.0-bin-hadoop2.7 对应博文:https://blog.csdn.net/hambition/article/details/80769771 由于博文上传图片比较麻烦,图片又非常之多,没分的同学可直接看博文。 立即下载

相关推荐

【ANSYS Workbench仿真】命令流:压力渗透pressure penetration

对与流体接触的part添加边界压力,使流体压力渗透点的接触应力与流体压力相等,以便得到真实的变形结果,就需要用到“pressure penetration”。 但是在ansys中,只能通过ADPL的形式添加,即在workbench中添加命令流的形式。此文主要介绍了**压力渗透的添加要点**和**命令流使用说明**。

路边小M's Blog 1万+

Java实现好用的Tuple

package tupleDemo; import java.util.Optional; public abstract class Tuple { //&lt;A&gt;:声明此方法为泛型方法,该方法持有一个类型A //这里使用Optional是为了提醒使用返回值的方法做非Null检查 public abstract &lt;A&gt; Optional&lt;A...

咸鱼的博客 1万+

XGBoost详解(原理篇)

XGBoost全称为eXtreme Gradient Boosting,即极致梯度提升树。XGBoost是Boosting算法的其中一种,Boosting算法的思想是将许多弱分类器集成在一起,形成一个强分类器(个体学习器间存在强依赖关系,必须串行生成的序列化方法)。Note:关于Boosting算法详见博文集成学习详解_tt丫的博客-优快云博客XGBoost是一种提升树模型,即它将许多树模型集成在一起,形成一个很强的分类器。其中所用到的树模型则是CART回归树模型。

tt丫的博客 7万+

Flink实战--多流合并

本文介绍Flink的流合并操作。在Flink中,流的合并操作算子有:Union和Connect等。本文主要介绍这个两个算子的使用方法

zg_hover的专栏 5276

ads传统功放设计笔记(3)

传统功放设计的流程一般包括以下这些步骤: 1、明确设计目标 2、选择功放管子 3、确定静态工作点 4、设计偏置电路 5、判断稳定性 6、负载与源牵引 7、输入输出阻抗匹配 8、原理图优化 9、大信号仿真 10、版图设计 11、版图联合仿真 12、pcb设计 第二节我们设计仿真了功放的原理图。之后我们需要对版图进行设计和仿真。 10、版图设计 首先将S参数控件都打叉,还要去掉电源、源负载阻抗、地、芯片、电容。在原先电容和芯片的位置加上gap,设置好长度和间隔。之后在电源引脚、输入输出引脚和隔离的两端加上端口。

qq_40995480的博客 6029

ST MCSDK V6.2.0实战:手把手教你配置HSO-ST观测器,体验500ms收敛的电机无感控制

本文详细介绍了ST MCSDK V6.2.0中HSO-ST观测器的配置方法,实现500ms内电流收敛的无感电机控制。从环境搭建、核心参数解析到无感启动优化,提供实战技巧和性能调优策略,帮助开发者快速掌握高效电机控制技术。

weixin_28720767的博客 581

2、Scala数据结构Tuple

本文介绍Scala中的Tuple数据类型。 1、基本知识 tuple元组是一些不同类型的元素的集合。 Scala中的tuple是 不可变数据类型(immutable),即一旦声明后就不能改变其值。 一个元组tuple的最大元素上限是22。即可使用的tuple类型 TupleN(N元组),1<=N<=22。 2、Tuple的定义方法 2.1 方法一:直接定义。好处是不用声明Tuple的长度,简便 val s1 = (12,"Harry") val m1 = (20,12,16,4)

Toby的博客 617

【灰度共生矩阵(GLCM)原理及代码实现】

文章主旨详细介绍灰度共生矩阵(Gray-Level Co-occurrence Matrix, GLCM)的生成原理、核心特征量及其在图像纹理分析中的应用,并提供了可运行的Python代码实现。该网页是一篇理论结合实践的优秀技术文章。它不仅清晰地解释了GLCM这一经典纹理分析工具背后的数学原理,还提供了完整、可复现的代码,非常适合计算机视觉或图像处理领域的学习者和开发者入门并实践灰度共生矩阵。读者可以通过运行代码来直观理解GLCM如何工作,并提取图像的纹理特征。

blotemj.blog.youkuaiyun.com 180

【Spark】spark常用算子总结

一、Transformations转换算子 filter:过滤符合条件的记录数,true的保留、false的过滤 map:将RDD中的数据项,通过map中的函数映射变为一个新的元素(1进1出) mapPartition:执行结果与map相同,但是可以一次遍历整个patition mapPartitionWithIndex:类似于mapPartitions,除此之外还会携带分区的索引值 m...

GG(❤ ω ❤)YY 549

51单片机+DS18B20+数码管显示+超温提示+Proteus仿真

51单片机+DS18B20+数码管显示+超温提示+Proteus仿真 Proteus仿真 实例代码 #include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit we1 = P3^0; sbit we2 = P3^1; sbit we3 = P3^2; sbit we4 = P3^3; sbit DS = P1^0; sbit D1 = P3^6; sbit D2 = P3^7; uch

perseverance51博客 1540

某音私信接口二进制解析

本文探讨了某音私信接口的二进制请求处理过程,重点分析了请求体中的非文本字符和混合编码结构。文章详细描述了编码过程,包括使用Protocol Buffers的序列化方法将结构化数据转换为字节流,并通过Uint8Array包装成二进制数组。作者展示了如何提取和补全s.encode方法,并将其转化为Base64字符串以便在Python中解码执行

码王吴彦祖的博客 901

python哈姆雷特词频统计_Intellij idea配置Spark开发环境,统计哈姆雷特词频(2)

idea 新建maven 项目输入maven坐标maven 坐标编辑maven文件Spark 体系中间层Spark,即核心模块Spark Core,必须在maven中引用。编译Spark还要声明java8编译工具。1.8org.apache.sparkspark-core_2.112.1.0maven-compiler-plugin${java.version}${java.version}ide...

weixin_39524439的博客 185

uniapp - 解决苹果ios真机运行报错:错误:请查看是否设备未加入到证书列表或者确认证书类型是否匹配(HbuilderX运行IOS手机出现问题,uniapp运行到IOS真机提示请查看是否设备未)

uni-app,ios苹果,App平台端,uniapp运行到IOS真机提示错误:请查看是否设备未加入到证书列表或者确认证书类型是否匹配,UUID在哪里,uniApp运行到ios真机报错解决,安装自定义基座App失败,没找到有计划资源,证书、标识符和描述文件,证书标识符和描述文件下面没有选项怎么回事,HBuilder真机调试报错请查看是否设备未加入到证书列表或者确认证书类型是否匹配,UniApp运行到IOS真机提示,授权的设备才可以直接安装基座,添加调试的IOS设备,在Devices中,添加手机设备UUID

🏆 前端领域优质创作者 1万+

groovy Tuple2 二元组例子

groovy Tuple2 二元组例子

qq690452074的专栏 880

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Spark学习(2)

昨天安装完成,起床后抄了个简单的单词计数,单机版运行成功,从Java和Scala两种语言比较来看,Scala在做Spark开发的时候确实要简练很多:/** * Created by tsq on 2016-07-17. */ import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaPairRDD; impo

三人行必有我师,手写三行必有所悟 6395

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Spark重点难点知识总结(二)

一.Tuple2讲解 1.何谓Tuple? Tuple就是用来把几个数据放在一起的比较方便的方式,注意是“几个数据”,因此没有Tuple1这一说。 2.怎么用Tuple? val scores=Array(Tuple2(1,100),Tuple2(2,90),Tuple2(3,100),Tuple2(2,90),Tuple2(3,100)) val content=sc.paralle

shuhaojie的博客 4238

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

java中使用Pair

本文讨论一种称为Pair的数据结构,该结构提供了一种处理简单的键与值关联的简便方法,当我们要从一个方法返回两个值时,对特别有用。 jdk库中提供了Pair的简单实现,除此之外,第三方库(例如Apache Commons和Vavr)在各自的API中也提供了类似的功能。 1、jdk中的实现 1)javafx.util.Pair类: import javafx.util.Pair; Pair<Integer, String> pair = new Pair<>(1, "One"

赶路人儿 1万+

Scala中的Map和Tuple

1、默认情况下Map构造的是不可变的集合,里面的内容不可修改,一旦修改就变成新的Map,原有的Map内容保持不变; 2、Map的实例是调用工厂方法模式apply来构造Map实例,而需要主要的是Map是接口,在apply中使用了具体的实现; 3、如果想直接new出Map实例,则需要使用HashMap等具体的Map子类; 4、查询一个Map中的的值一定是采用getOrElse的语法的,一方面是在

麒麟 3533

Scala中Tuple(元组)的使用

在我们使用某些编程语言开发时,有些时候总是希望函数(方法)返回多个值。一般情况下我们有几种选择,下面我们以Java为例。 将返回值作为参数参入函数或者方法,然后修改实参,这样就相当于“返回值”。如: public void func1(String arg1,String arg2){ arg1 = "abc"; arg2 = "bcd"; }这种方式代码比较

行者 1万+

C# Tuple 创建一个新二元集合

List<string> list1=new List<string>(); List<string> list2=new List<string>(); //Tuple<List<string>, List<string>> tupl...

weixin_30881367的博客 405

tuple(new)

[code="c++"] #include #include using namespace std; int main() { tuple t1(1,2,"abc"); cout

program is a art 201

Java 的 Tuple 元组数据类型

元组类型,即 Tuple 常在脚本语言中出现,例如 Scala 的 ("Unmi", "china@qq.com", "blahbla")。元组可认为是象数组一样的容器,它的目的是让你方便构造和引用,例如 Pair 可认为是一个只能存两个元素的元组,像是个 Map; 真正的元组应该是可以任意多个元素的容器,绕来绕去,它还是数组,或列表,所以我们实现上还是要借助于数组或是列表。 先看 Scala ...

weixin_34255793的博客 1079

Scala 入门-元组(Tuple)

专栏原创出处:github-源笔记文件 ,github-源码 ,欢迎 Star,转载请附上原文出处链接和本声明。 Scala 编程语言专栏系列笔记,系统性学习可访问个人复盘笔记-技术博客 Scala 编程语言 元组 在 Scala 中,元组是一个可以容纳不同类型元素的类。 元组是不可变的,当我们需要从函数返回多个值时,元组会派上用场。 用户有时可能在元组和 case 类之间难以选择。通常,...

2.wa 6164

Python 创建特殊元组tuple

创建1个元素的tuple  (1,) 创建单元素tupletuple和list一样,可以包含 0 个、1个和任意多个元素。包含多个元素的 tuple,前面我们已经创建过了。包含 0 个元素的 tuple,也就是空tuple,直接用 ()表示:&gt;&gt;&gt; t = ()&gt;&gt;&gt; t()创建包含1个元素的 tuple 呢?来试试:&gt;&gt;&gt; t = (1)&...

weixin_34166472的博客 309

Spark PairRDD 转化二

package edu.berkeley.simple_project; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; import org.apache.spark.SparkConf; import org.apache.spa

xfei.zhang 4501

Spark——键值对操作

一、动机 Spark为包含键值对类型的RDD提供了一些专有的操作。这些RDD被称为pairRDD。提供并行操作各个节点或跨界点重新进行数据分组的操作接口。 二、创建Pair RDD 1、在sprk中,很多存储键值对的数据在读取时直接返回由其键值对数据组成的pair RDD。 2、可以调用map()函数,将一个普通的RDD转换为pair RDD。 在Scala中,为了提

俺叫赵小邪的博客 7538
上一篇: 行为模式之解释器模式 示例
下一篇: 对于重构的思考
MrBack
博客等级 码龄9年 27粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值