激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - Java和scala實(shí)現(xiàn) Spark RDD轉(zhuǎn)換成DataFrame的兩種方法小結(jié)

Java和scala實(shí)現(xiàn) Spark RDD轉(zhuǎn)換成DataFrame的兩種方法小結(jié)

2021-05-07 13:34黑白調(diào)92 Java教程

今天小編就為大家分享一篇Java和scala實(shí)現(xiàn) Spark RDD轉(zhuǎn)換成DataFrame的兩種方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

一:準(zhǔn)備數(shù)據(jù)源

在項(xiàng)目下新建一個(gè)student.txt文件,里面的內(nèi)容為:

?
1
2
3
4
1,zhangsan,20
2,lisi,21
3,wanger,19
4,fangliu,18

二:實(shí)現(xiàn)

java版:

1.首先新建一個(gè)student的bean對(duì)象,實(shí)現(xiàn)序列化和tostring()方法,具體代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package com.cxd.sql;
import java.io.serializable;
@suppresswarnings("serial")
public class student implements serializable {
 string sid;
 string sname;
 int sage;
 public string getsid() {
  return sid;
 }
 public void setsid(string sid) {
  this.sid = sid;
 }
 public string getsname() {
  return sname;
 }
 public void setsname(string sname) {
  this.sname = sname;
 }
 public int getsage() {
  return sage;
 }
 public void setsage(int sage) {
  this.sage = sage;
 }
 @override
 public string tostring() {
  return "student [sid=" + sid + ", sname=" + sname + ", sage=" + sage + "]";
 }
 
}
       

2.轉(zhuǎn)換,具體代碼如下

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package com.cxd.sql;
import java.util.arraylist;
import org.apache.spark.sparkconf;
import org.apache.spark.api.java.javardd;
import org.apache.spark.sql.dataset;
import org.apache.spark.sql.row;
import org.apache.spark.sql.rowfactory;
import org.apache.spark.sql.savemode;
import org.apache.spark.sql.sparksession;
import org.apache.spark.sql.types.datatypes;
import org.apache.spark.sql.types.structfield;
import org.apache.spark.sql.types.structtype;
public class txttoparquetdemo {
 public static void main(string[] args) {
  
  sparkconf conf = new sparkconf().setappname("txttoparquet").setmaster("local");
  sparksession spark = sparksession.builder().config(conf).getorcreate();
  reflecttransform(spark);//java反射
  dynamictransform(spark);//動(dòng)態(tài)轉(zhuǎn)換
 }
 
 /**
  * 通過(guò)java反射轉(zhuǎn)換
  * @param spark
  */
 private static void reflecttransform(sparksession spark)
 {
  javardd<string> source = spark.read().textfile("stuinfo.txt").javardd();
  
  javardd<student> rowrdd = source.map(line -> {
   string parts[] = line.split(",");
   student stu = new student();
   stu.setsid(parts[0]);
   stu.setsname(parts[1]);
   stu.setsage(integer.valueof(parts[2]));
   return stu;
  });
  
  dataset<row> df = spark.createdataframe(rowrdd, student.class);
  df.select("sid", "sname", "sage").
  coalesce(1).write().mode(savemode.append).parquet("parquet.res");
 }
 /**
  * 動(dòng)態(tài)轉(zhuǎn)換
  * @param spark
  */
 private static void dynamictransform(sparksession spark)
 {
  javardd<string> source = spark.read().textfile("stuinfo.txt").javardd();
  
  javardd<row> rowrdd = source.map( line -> {
   string[] parts = line.split(",");
   string sid = parts[0];
   string sname = parts[1];
   int sage = integer.parseint(parts[2]);
   
   return rowfactory.create(
     sid,
     sname,
     sage
     );
  });
  
  arraylist<structfield> fields = new arraylist<structfield>();
  structfield field = null;
  field = datatypes.createstructfield("sid", datatypes.stringtype, true);
  fields.add(field);
  field = datatypes.createstructfield("sname", datatypes.stringtype, true);
  fields.add(field);
  field = datatypes.createstructfield("sage", datatypes.integertype, true);
  fields.add(field);
  
  structtype schema = datatypes.createstructtype(fields);
  
  dataset<row> df = spark.createdataframe(rowrdd, schema);
  df.coalesce(1).write().mode(savemode.append).parquet("parquet.res1");
  
  
 }
 
}

scala版本:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import org.apache.spark.sql.sparksession
import org.apache.spark.sql.types.stringtype
import org.apache.spark.sql.types.structfield
import org.apache.spark.sql.types.structtype
import org.apache.spark.sql.row
import org.apache.spark.sql.types.integertype
object rdd2dataset {
 
 case class student(id:int,name:string,age:int)
 def main(args:array[string])
 {
 
 val spark=sparksession.builder().master("local").appname("rdd2dataset").getorcreate()
 import spark.implicits._
 reflectcreate(spark)
 dynamiccreate(spark)
 }
 
 /**
     * 通過(guò)java反射轉(zhuǎn)換
     * @param spark
     */
 private def reflectcreate(spark:sparksession):unit={
 import spark.implicits._
 val sturdd=spark.sparkcontext.textfile("student2.txt")
 //todf()為隱式轉(zhuǎn)換
 val studf=sturdd.map(_.split(",")).map(parts⇒student(parts(0).trim.toint,parts(1),parts(2).trim.toint)).todf()
 //studf.select("id","name","age").write.text("result") //對(duì)寫入文件指定列名
 studf.printschema()
 studf.createorreplacetempview("student")
 val namedf=spark.sql("select name from student where age<20")
 //namedf.write.text("result") //將查詢結(jié)果寫入一個(gè)文件
 namedf.show()
 }
 
 /**
     * 動(dòng)態(tài)轉(zhuǎn)換
     * @param spark
     */
 private def dynamiccreate(spark:sparksession):unit={
 val sturdd=spark.sparkcontext.textfile("student.txt")
 import spark.implicits._
 val schemastring="id,name,age"
 val fields=schemastring.split(",").map(fieldname => structfield(fieldname, stringtype, nullable = true))
 val schema=structtype(fields)
 val rowrdd=sturdd.map(_.split(",")).map(parts⇒row(parts(0),parts(1),parts(2)))
 val studf=spark.createdataframe(rowrdd, schema)
  studf.printschema()
 val tmpview=studf.createorreplacetempview("student")
 val namedf=spark.sql("select name from student where age<20")
 //namedf.write.text("result") //將查詢結(jié)果寫入一個(gè)文件
 namedf.show()
 }
}

注:

1.上面代碼全都已經(jīng)測(cè)試通過(guò),測(cè)試的環(huán)境為spark2.1.0,jdk1.8。

2.此代碼不適用于spark2.0以前的版本。

以上這篇java和scala實(shí)現(xiàn) spark rdd轉(zhuǎn)換成dataframe的兩種方法小結(jié)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。

原文鏈接:https://blog.csdn.net/u010592112/article/details/73730796

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 红桃一区 | 国产精品久久久不卡 | 美女羞羞视频在线观看 | 国产91一区 | 一级毛片在线观看免费 | 久久精品在线免费观看 | 一级成人免费 | 国产精品成人一区二区三区电影毛片 | 一级成人欧美一区在线观看 | 亚洲午夜免费电影 | 12av毛片 | 亚洲小视频网站 | 在线中文日韩 | 日本中文字幕电影在线观看 | 久草在线高清视频 | 99久久免费看精品国产一区 | 日本在线高清 | 欧美成人一区二区三区 | 福利免费在线观看 | 李宗瑞国产福利视频一区 | 欧美久久一区 | 国产色视频在线观看免费 | 色婷婷久久一区二区 | 桥本有菜免费av一区二区三区 | 国内毛片视频 | 久色婷婷 | 久久恋 | 免费黄色小视频网站 | 免费国产人成网站 | 久久老司机精品视频 | 九九热精品免费 | chinese乱子伦xxxx国语对白 | 婷婷久久综合九色综合色多多蜜臀 | 玖玖精品视频在线 | 欧美a在线 | 亚洲精品一二三区 | 国产高清毛片 | 日韩在线播放一区二区 | 羞羞视频免费入口网站 | 免费欧美 | 在线成人免费视频 |