主要内容:

1. List转JavaRDD,打印JavaRDD

2. List转JavaRDD,JavaRDD转JavaPairRDD,打印JavaPairRDD

3. JavaRDD<String> 转 JavaRDD<Row>


1. 先将List转为JavaRDD,再通过collect()和foreach打印JavaRDD

/**
* @author Yu Wanlong
*/ import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext; public class ReadTextToRDD { public static void main(String[] args) {
// configure spark
SparkConf sparkConf = new SparkConf().setAppName("Read Text to RDD")
.setMaster("local[2]").set("spark.executor.memory","2g");
// start a spark context
JavaSparkContext jsc = new JavaSparkContext(sparkConf);
// build List<String>
List<String> list = Arrays.asList("a:1", "a:2", "b:1", "b:1", "c:1","d:1");
// List<String> to JavaRDD<String>
JavaRDD<String> javaRDD = jsc.parallelize(list); // 使用collect打印JavaRDD
for (String str : javaRDD.collect()) {
System.out.println(str);
}
// 使用foreach打印JavaRDD
javaRDD.foreach(new VoidFunction<String>() {
@Override
public void call(String s) throws Exception {
System.out.println(s);
}
});
}
} a:1
a:2
b:1
b:1
c:1
d:1

2.  List转JavaRDD,JavaRDD转JavaPairRDD,打印JavaPairRDD

/**
* @author Yu Wanlong
*/ import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext; public class ReadTextToRDD { public static void main(String[] args) {
// configure spark
SparkConf sparkConf = new SparkConf().setAppName("Read Text to RDD")
.setMaster("local[2]").set("spark.executor.memory","2g");
// start a spark context
JavaSparkContext jsc = new JavaSparkContext(sparkConf);
// build List<String>
List<String> list = Arrays.asList("a:1", "a:2", "b:1", "b:1", "c:1","d:1");
// List<String> to JavaRDD<String>
JavaRDD<String> javaRDD = jsc.parallelize(list);
// JavaRDD<String> to JavaPairRDD
JavaPairRDD<String, Integer> javaPairRDD = javaRDD.mapToPair(
new PairFunction<String, String, Integer>() {
@Override
public Tuple2<String, Integer> call(String s) throws Exception {
String[] ss = s.split(":");
return new Tuple2<String, Integer>(ss[0], Integer.parseInt(ss[1]));
}
});
// 使用collect对JavaPairRDD打印
for (Tuple2<String, Integer> str : javaPairRDD.collect()) {
System.out.println(str.toString());
}
}
} (a,1)
(a,2)
(b,1)
(b,1)
(c,1)
(d,1)

 在JavaRDD<String>转为JavaPairRDD<String,Integer>的过程中,关键点为:

第一:mapToPair函数中的PairFunction<String, String, Integer>():PairFunction<JavaRDD输入的类型, 返回的JavaPairRDD的key类型, 返回的JavaPairRDD的value类型>()

第二:由于JavaPairRDD的存储形式本是key-value形式,Tuple2<String, Integer> 为需要返回的键值对类型,Tuple2<Key的类型, value类型>

第三:String s,String类型为JavaRDD<String>中的String,s代表其值

第四:return new Tuple2<String, Integer>(ss[0], Integer.parseInt(ss[1])),此处为返回的key-value的返回结果

小结:JavaRDD在转换成JavaPairRDD的时候,实际上是对单行的数据整合成key-value形式的过程,由JavaPairRDD在进行key-value运算时效率能大大提升

3.  JavaRDD<String> 转 JavaRDD<Row>

/**
* @author Yu Wanlong
*/ import org.apache.spark.sql.Row;
import org.apache.spark.SparkConf;
import org.apache.spark.sql.RowFactory;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext; public class ReadTextToRDD { public static void main(String[] args) {
// configure spark
SparkConf sparkConf = new SparkConf().setAppName("Read Text to RDD")
.setMaster("local[2]").set("spark.executor.memory","2g");
// start a spark context
JavaSparkContext jsc = new JavaSparkContext(sparkConf);
// build List<String>
List<String> list = Arrays.asList("a:1", "a:2", "b:1", "b:1", "c:1","d:1");
// List<String> to JavaRDD<String>
JavaRDD<String> javaRDD = jsc.parallelize(list); // JavaRDD<String> to JavaRDD<Row>
JavaRDD<Row> javaRDDRow = javaRDD.map(new Function<String, Row>() {
@Override
public Row call(String s) throws Exception {
String[] ss = s.split(":");
return RowFactory.create(ss[0], ss[1]);
}
}); // 打印JavaRDD<Row>
for (Row str : javaRDDRow.collect()) {
System.out.println(str.toString());
}
}
} [a,1]
[a,2]
[b,1]
[b,1]
[c,1]
[d,1]

Spark JavaRDD、JavaPairRDD、Dataset相互转换与打印的更多相关文章

  1. Spark JavaRDD、JavaPairRDD、Dataset之间的相互转换

    主要内容: 1. JavaRDD to JavaPairRDD 2. Dataset to JavaPairRDD 3. JavaPairRDD to JavaRDD 4. JavaRDD to Da ...

  2. XML与DataSet相互转换,DataSet查询

    以FileShare.Read形式读XML文件: string hotspotXmlStr = string.Empty; try { Stream fileStream = new FileStre ...

  3. Python 实现列表与二叉树相互转换并打印二叉树封装类-详细注释+完美对齐

    # Python 实现列表与二叉树相互转换并打印二叉树封装类-详细注释+完美对齐 from binarytree import build import random # https://www.cn ...

  4. Python 实现列表与二叉树相互转换并打印二叉树16-详细注释+完美对齐-OK

    # Python 实现列表与二叉树相互转换并打印二叉树16-详细注释+完美对齐-OK from binarytree import build import random # https://www. ...

  5. spark rdd df dataset

    RDD.DataFrame.DataSet的区别和联系 共性: 1)都是spark中得弹性分布式数据集,轻量级 2)都是惰性机制,延迟计算 3)根据内存情况,自动缓存,加快计算速度 4)都有parti ...

  6. C#中Json和List/DataSet相互转换

    #region List<T> 转 Json        /// <summary>        /// List<T> 转 Json        /// & ...

  7. Spark Streaming之dataset实例

    Spark Streaming是核心Spark API的扩展,可实现实时数据流的可扩展,高吞吐量,容错流处理. bin/spark-submit --class Streaming /home/wx/ ...

  8. 泛型集合与DataSet相互转换

    一.泛型转DataSet /// <summary> /// 泛型集合转换DataSet /// </summary> /// <typeparam name=" ...

  9. Spark Dataset DataFrame 操作

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

随机推荐

  1. centos7 安装mysql5.6.32

    1.  检查是否存在旧的mysql,执行: rpm -qa|grep -i mysql PS:若存在旧mysql,删除查询到的旧mysql,执行: rpm -e --nodeps  XXXX      ...

  2. 【POJ1811】Prime Test

    [题目大意] 若n是素数,输出“Prime”,否则输出n的最小素因子,(n<=2^54) [题解] 和bzoj3667差不多,知识这道题没那么坑. 直接上Pollord_Rho和Rabin_Mi ...

  3. SQL 数据库 学习 005 学习必备的一些操作 --- 如何新建数据库 如何附加和分离数据库(如何备份还原数据库) 如何删除数据库

    我的电脑系统: Windows 10 64位 使用的SQL Server软件: SQL Server 2014 Express 如果我们要学习这个数据库,我们需要学习什么知识.比如:如何新建一个数据库 ...

  4. Ubuntu Phone开箱上手

    在昨晚举行的发布会上Canonical和硬件厂商BQ进行合作,推出了首款面向消费市场的Ubuntu手机--Aquaris E4.5,带来了与常见的iPhone和Android机完全不同的操作体验,设备 ...

  5. [C++] decltype(auto) C++ 11 feature

    1 //C++ 11 feature template <class T1, class T2> auto getMultiply(T1 data1, T2 data2) -> de ...

  6. TCP、UDP、HTTP、SOCKET之间的区别与联系-乾颐堂CCIE

    IP:网络层协议: TCP和UDP:传输层协议: HTTP:应用层协议: SOCKET:TCP/IP网络的API. TCP/IP代表传输控制协议/网际协议,指的是一系列协议. TCP和UDP使用IP协 ...

  7. [BAT] 通过批处理加host

    echo. >> %WINDIR%\system32\drivers\etc\hosts & echo xxx.xxx.xxx.xx test_host >> %WIN ...

  8. vscode安装设置go

    vscode安装设置go vscode安装go配置 1.下载最新的vscode: https://code.visualstudio.com/docs/?dv=win 2.下载go: https:// ...

  9. JavaScript排序,不只是冒泡

    做编程,排序是个必然的需求.前端也不例外,虽然不多,但是你肯定会遇到. 不过说到排序,最容易想到的就是冒泡排序,选择排序,插入排序了. 冒泡排序 依次比较相邻的两个元素,如果后一个小于前一个,则交换, ...

  10. javaScript总结51: 变量查找规则与词法作用域

    作用域: 1 在es5.0中只有函数可以构成一个作用域 2 全局作用域: 整个js代码执行的环境 3 局部作用域: 函数可以构成一个局部作用域 4 全局变量: 在全局作用域中申明的变量 5 局部变量: ...