Spark JavaRDD、JavaPairRDD、Dataset相互转换与打印
主要内容:
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相互转换与打印的更多相关文章
- Spark JavaRDD、JavaPairRDD、Dataset之间的相互转换
主要内容: 1. JavaRDD to JavaPairRDD 2. Dataset to JavaPairRDD 3. JavaPairRDD to JavaRDD 4. JavaRDD to Da ...
- XML与DataSet相互转换,DataSet查询
以FileShare.Read形式读XML文件: string hotspotXmlStr = string.Empty; try { Stream fileStream = new FileStre ...
- Python 实现列表与二叉树相互转换并打印二叉树封装类-详细注释+完美对齐
# Python 实现列表与二叉树相互转换并打印二叉树封装类-详细注释+完美对齐 from binarytree import build import random # https://www.cn ...
- Python 实现列表与二叉树相互转换并打印二叉树16-详细注释+完美对齐-OK
# Python 实现列表与二叉树相互转换并打印二叉树16-详细注释+完美对齐-OK from binarytree import build import random # https://www. ...
- spark rdd df dataset
RDD.DataFrame.DataSet的区别和联系 共性: 1)都是spark中得弹性分布式数据集,轻量级 2)都是惰性机制,延迟计算 3)根据内存情况,自动缓存,加快计算速度 4)都有parti ...
- C#中Json和List/DataSet相互转换
#region List<T> 转 Json /// <summary> /// List<T> 转 Json /// & ...
- Spark Streaming之dataset实例
Spark Streaming是核心Spark API的扩展,可实现实时数据流的可扩展,高吞吐量,容错流处理. bin/spark-submit --class Streaming /home/wx/ ...
- 泛型集合与DataSet相互转换
一.泛型转DataSet /// <summary> /// 泛型集合转换DataSet /// </summary> /// <typeparam name=" ...
- Spark Dataset DataFrame 操作
Spark Dataset DataFrame 操作 相关博文参考 sparksql中dataframe的用法 一.Spark2 Dataset DataFrame空值null,NaN判断和处理 1. ...
随机推荐
- lock free queues
无锁队列,下面链接是源码,包含4种队列:单生产者单消费者/多生产者多消费者,队列定长/不定长.元素建议为简单数据类型,复杂类型都采用指针形式. queues-master.zip 源码来源:https ...
- 75. Sort Colors (Array)
Given an array with n objects colored red, white or blue, sort them so that objects of the same colo ...
- 导入txt文件到SQL SERVER 2008
最近在学习数据库,想要试处理大量数据.大量的数据手动输入是不可能的了,所以需要导入.本人上网看了不少的教程,然后下载了txt格式的一万条彩票开奖记录数据.但是把这些数据导入到SQL Server 20 ...
- C程序之包含头文件
在C程序中包含文件有以下两种方法: 方法一:#include<XXX.h> 这里的XXX一般是改动较小的标准库,用符号"<"和">"将要 ...
- 面向对象的JavaScript-009-闭包
引自:https://developer.mozilla.org/cn/docs/Web/JavaScript/Closures 闭包是指能够访问自由变量的函数 (变量在本地使用,但在闭包中定义).换 ...
- python2中的__new__与__init__,新式类和经典类-乾颐堂
在python2.x中,从object继承得来的类称为新式类(如class A(object))不从object继承得来的类称为经典类(如class A()) 新式类跟经典类的差别主要是以下几点: 1 ...
- [SoapUI] 按照 Test Step Type 获取所有满足条件的 Test Step
获取当前测试用例下所有Groovy Script类型的测试步骤 def testStepList = testRunner.testCase.getTestStepsOfType(com.eviwar ...
- 案例研究:手机APP的UI设计流程
以下内容由Mockplus(http://www.mockplus.cn)团队翻译整理,仅供学习交流. UI设计——不仅仅是创造漂亮的图像. 面临的挑战 我为自己提供了一个绝佳的机会来训练我的视觉设计 ...
- Qt的翻译文件QTranslator不能使用问题总结(原)
笔者今天在自己工程中使用翻译文件,发现没有起作用,反复查找,发现是用宏定义了命名空间,生成.ts文件时,不会加上命名空间,所以生成的.qm文件在实际使用时,会无法找到对应的语句. 如果将宏定义的命名空 ...
- 编写高质量代码改善C#程序的157个建议——建议136:优先使用后缀表示已有类型的新版本
建议136:优先使用后缀表示已有类型的新版本 加后缀在某些情况下是很奇怪的形式,我们都不愿意看到OrderProcessor2这样的类型.但是,有的时候仍旧有必要这样做.最典型的是FCL中关于数字证书 ...