国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

實驗SparkSQL編程初級實踐

這篇具有很好參考價值的文章主要介紹了實驗SparkSQL編程初級實踐。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

實驗SparkSQL編程初級實踐

實踐環(huán)境:

  1. Oracle VM VirtualBox 6.1.12

  2. Ubuntu 16.04

  3. Hadoop3.1.3

  4. JDK1.8.0_162

  5. spark2.4.0

  6. python3.5

  7. Windows11系統(tǒng)下pycharm2019.1專業(yè)版

實驗?zāi)康模?/strong>

  1. 通過實驗掌握Spark SQL的基本編程方法;

  2. 熟悉RDD到DataFrame的轉(zhuǎn)化方法;

  3. 熟悉利用Spark SQL管理來自不同數(shù)據(jù)源的數(shù)據(jù)。

實驗內(nèi)容,步驟與實驗結(jié)果:

  1. Spark SQL 基本操作

將下列JSON格式數(shù)據(jù)復(fù)制到Linux系統(tǒng)中,并保存命名為employee.json。

{ “id”:1 , “name”:" Ella" , “age”:36 } { “id”:2, “name”:“Bob”,“age”:29 } { “id”:3 , “name”:“Jack”,“age”:29 } { “id”:4 , “name”:“Jim”,“age”:28 } { “id”:4 , “name”:“Jim”,“age”:28 } { “id”:5 , “name”:“Damon” } { “id”:5 , “name”:“Damon” }

為employee.json創(chuàng)建DataFrame,并寫出Python語句完成下列操作:

import os
os.environ[“JAVA_HOME”]=“/usr/lib/jvm/jdk1.8.0_162”
os.environ[“PYSPARK_PYTHON”]=‘/usr/bin/python3.5’
#import SparkSession
from pyspark.sql import SparkSession
#create spar session object
spark=SparkSession.builder.appName(‘data_processing’).getOrCreate()
# Load csv Dataset
df=spark.read.json(“employee.json”)

1 .查詢所有數(shù)據(jù);
df.show()實驗SparkSQL編程初級實踐

2.查詢所有數(shù)據(jù),并去除重復(fù)的數(shù)據(jù);
df.distinct().show()
實驗SparkSQL編程初級實踐
3.查詢所有數(shù)據(jù),打印時去除id字段;
df.drop(“id”).show()
實驗SparkSQL編程初級實踐
4.篩選出age>30的記錄;
df.filter(“age”>30).show()
實驗SparkSQL編程初級實踐
5.將數(shù)據(jù)按age分組;
df.groupBy(“age”).count().show()
實驗SparkSQL編程初級實踐
6.將數(shù)據(jù)按name升序排列;
df.sort(df.name.asc()).show()
實驗SparkSQL編程初級實踐
7.取出前3行數(shù)據(jù);
df.show(3)
實驗SparkSQL編程初級實踐
8. 查詢所有記錄的name列,并為其取別名為username;
df.distinct().show()
實驗SparkSQL編程初級實踐
9.查詢年齡age的平均值;
df.agg({“age”:“mean”}).show()
實驗SparkSQL編程初級實踐
10. 查詢年齡age的最小值。
df.agg({“age”:“min”}).show()
實驗SparkSQL編程初級實踐

2.編程實現(xiàn)將RDD轉(zhuǎn)換為DataFrame

源文件內(nèi)容如下(包含id,name,age):

1,Ella,36 2,Bob,29 3,Jack,29

請將數(shù)據(jù)復(fù)制保存到Linux系統(tǒng)中,命名為employee.txt,實現(xiàn)從RDD轉(zhuǎn)換得到DataFrame,并按“id:1,name:Ella,age:36”的格式打印出DataFrame的所有數(shù)據(jù)。請寫出程序代碼。

#反射機制 – 針對數(shù)據(jù)項已知
import os
os.environ[“JAVA_HOME”]=“/usr/lib/jvm/jdk1.8.0_162”
os.environ[“PYSPARK_PYTHON”]=‘/usr/bin/python3.5’

# 導(dǎo)入Spark相關(guān)包
from pyspark.sql import Row
from pyspark.sql.types import *
from pyspark import SparkContext,SparkConf
from pyspark.sql import SparkSession

# 構(gòu)建 spark 單元
spark = SparkSession.builder.config(conf=SparkConf()).getOrCreate()
# 構(gòu)建表頭
schemaString = “id name age”
fields = [StructField(field_name ,StringType(),True) for field_name in schemaString.split(" ")]
schema = StructType(fields)

# 加載數(shù)據(jù)
filename = “employee.txt”
people= spark.sparkContext.textFile(filename)
# print(people.collect())
# 數(shù)據(jù)預(yù)處理
people_data = people.map(lambda x : x.split(“,”))
# print(people_data.collect())
# 處理為 ROW 對象模式
people_rows = people_data.map(lambda attributes : Row(int(attributes[0]),attributes[1],int(attributes[2])))
# 構(gòu)建 DataFrame
schemapeople = spark.createDataFrame(people_rows,schema)
# 構(gòu)建臨時表
schemapeople.createOrReplaceTempView(“employee”)
# SQL 查詢
DF_people = spark.sql(“select * from employee”)
# DF – RDD
people_rdd = DF_people.rdd.map(lambda p : “id:” + p.id + “,” + “name:” + p.name + “,” + “Age:” + str(p.age))
# print(people_rdd.collect())
# print(people_rdd.collect())
for i in people_rdd.collect():
print(i)
實驗SparkSQL編程初級實踐

3. 編程實現(xiàn)利用DataFrame讀寫MySQL的數(shù)據(jù)

(1)在MySQL數(shù)據(jù)庫中新建數(shù)據(jù)庫sparktest,再創(chuàng)建表employee,包含如表5-2所示的兩行數(shù)據(jù)。

表5-2 employee表原有數(shù)據(jù)

id name gender Age
1 Alice F 22
2 John M 25

mysql> create database sparktest;

mysql> show databases;

mysql> use sparktest;

mysql> create table employee(id int(4),name char(20),gender char(4),age int(4));

mysql> insert into employee values(1,“Alice”,“F”,22);

mysql> insert into employee values(2,“John”,“M”,25);

mysql> select * from employee;
實驗SparkSQL編程初級實踐
實驗SparkSQL編程初級實踐
實驗SparkSQL編程初級實踐
(2)配置Spark通過JDBC連接數(shù)據(jù)庫MySQL,編程實現(xiàn)利用DataFrame插入如表5-3所示的兩行數(shù)據(jù)到MySQL中,最后打印出age的最大值和age的總和。

表5-3 employee表新增數(shù)據(jù)

id name gender age
3 Mary F 26
4 Tom M 23

關(guān)于數(shù)據(jù)庫的相關(guān)參數(shù) driver – com.mysql.jdbc.Driver 數(shù)據(jù)庫的JDBC驅(qū)動 url – 數(shù)據(jù)庫的連接地址 jdbc:mysql://localhost:3306/spark dbtable – 訪問的數(shù)據(jù)表 student user – 數(shù)據(jù)庫的用戶名 test password – 123456 數(shù)據(jù)庫的用戶密碼
查看數(shù)據(jù)庫內(nèi)容并插入數(shù)據(jù)代碼如下:
# -*- coding:utf-8 -*-
#反射機制 – 針對數(shù)據(jù)項已知
import os
os.environ[“JAVA_HOME”]=“/usr/lib/jvm/jdk1.8.0_162”
os.environ[“PYSPARK_PYTHON”]=‘/usr/bin/python3.5’
SUBMIT_ARGS = “–packages mysql:mysql-connector-java:5.1.40 pyspark-shell”
os.environ[“PYSPARK_SUBMIT_ARGS”] = SUBMIT_ARGS

from pyspark.sql import Row
from pyspark.sql.types import *
from pyspark import SparkContext,SparkConf
from pyspark.sql import SparkSession

jdbcStr = “jdbc:mysql://localhost:3306/sparktest”
# 構(gòu)建 spark 單元
spark = SparkSession.builder.config(conf = SparkConf()).getOrCreate()
# 讀取數(shù)據(jù)庫中的數(shù)據(jù)
jdbcDF=spark.read.format(“jdbc”).option(“url”,jdbcStr).option(“driver”,“com.mysql.jdbc.Driver”).option(“dbtable”,“employee”).option(“user”, “root”).option(“password”, “123456”).load()
# 數(shù)據(jù)查看
jdbcDF.show()

# 下面設(shè)置模式信息
schema = StructType([StructField(“id”, IntegerType(), True),StructField(“name”, StringType(), True),StructField(“gender”, StringType(), True),StructField(“age”, IntegerType(), True)])
# 下面設(shè)置兩條數(shù)據(jù),表示兩個學(xué)生的信息
studentRDD = spark.sparkContext.parallelize([“3 Mary F 26”,“4 Tom M 23”]).map(lambda x:x.split(“\t”))
# 下面創(chuàng)建Row對象,每個Row對象都是rowRDD中的一行
rowRDD = studentRDD.map(lambda p:Row(int(p[0].strip()), p[1].strip(), p[2].strip(), int(p[3].strip())))
# 建立起Row對象和模式之間的對應(yīng)關(guān)系,也就是把數(shù)據(jù)和模式對應(yīng)起來
studentDF = spark.createDataFrame(rowRDD, schema)
studentDF.show()

# 寫入數(shù)據(jù)庫
prop = {}
prop[‘user’] = ‘root’
prop[‘password’] = ‘123456’
prop[‘driver’] = “com.mysql.jdbc.Driver”
studentDF.write.jdbc(jdbcStr,‘employee’,‘a(chǎn)ppend’, prop)

# 讀取數(shù)據(jù)庫中的數(shù)據(jù)
jdbcDF=spark.read.format(“jdbc”).option(“url”,jdbcStr).option(“driver”,“com.mysql.jdbc.Driver”).option(“dbtable”,“employee”).option(“user”, “root”).option(“password”, “123456”).load()
# 數(shù)據(jù)查看
jdbcDF.show()

print(type(jdbcDF))
#查詢年齡age的最大值
jdbcDF.agg({“age”:“max”}).show()
#查詢年齡age的總和值
jdbcDF.agg({“age”:“sum”}).show()
實驗SparkSQL編程初級實踐
實驗SparkSQL編程初級實踐
出現(xiàn)的問題與解決方案:
問題一:spark連接mysql時報錯,找不到JDBC。
問題原因:可能是實驗前沒有將jdbc放入spark的jars里面也可能是代碼差點什么。

解決方法
將適合的jdbc放入spark的jars里面,并將jdbc路徑添加在spark-env.sh中。
實驗SparkSQL編程初級實踐
以上步驟操作后重啟后并沒有解決。
復(fù)制spark-defaults.conf.template文件,修改spark-defaults.conf文件內(nèi)容。
實驗SparkSQL編程初級實踐
再次重啟嘗試依舊報錯。在代碼中加入如下兩行:
實驗SparkSQL編程初級實踐
運行成功?。。。ㄎ乙膊恢朗遣皇侵皇且驗檫@兩行而執(zhí)行成功的,但總歸解決了)文章來源地址http://www.zghlxwxcb.cn/news/detail-439741.html

到了這里,關(guān)于實驗SparkSQL編程初級實踐的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 實驗四 Spark Streaming編程初級實踐

    實驗四 Spark Streaming編程初級實踐

    數(shù)據(jù)流? :數(shù)據(jù)流通常被視為一個隨時間延續(xù)而無限增長的動態(tài)數(shù)據(jù)集合,是一組順序、大量、快速、連續(xù)到達(dá)的數(shù)據(jù)序列。通過對流數(shù)據(jù)處理,可以進(jìn)行衛(wèi)星云圖監(jiān)測、股市走向分析、網(wǎng)絡(luò)攻擊判斷、傳感器實時信號分析。 1.下載安裝包 https://www.apache.org/dyn/closer.lua/flume/

    2024年04月26日
    瀏覽(33)
  • 大數(shù)據(jù)實驗 實驗六:Spark初級編程實踐

    大數(shù)據(jù)實驗 實驗六:Spark初級編程實踐

    實驗環(huán)境:Windows 10 Oracle VM VirtualBox 虛擬機:cnetos 7 Hadoop 3.3 因為Hadoop版本為3.3所以在官網(wǎng)選擇支持3.3的spark安裝包 解壓安裝包到指定文件夾 配置spark-env.sh 啟動成功 (1) 在spark-shell中讀取Linux系統(tǒng)本地文件“/home/hadoop/test.txt”,然后統(tǒng)計出文件的行數(shù); (2) 在spark-shell中讀

    2024年02月04日
    瀏覽(174)
  • 【Spark編程基礎(chǔ)】實驗三RDD 編程初級實踐(附源代碼)

    【Spark編程基礎(chǔ)】實驗三RDD 編程初級實踐(附源代碼)

    1、熟悉 Spark 的 RDD 基本操作及鍵值對操作; 2、熟悉使用 RDD 編程解決實際具體問題的方法 1、Scala 版本為 2.11.8。 2、操作系統(tǒng):linux(推薦使用Ubuntu16.04)。 3、Jdk版本:1.7或以上版本。 請到本教程官網(wǎng)的“下載專區(qū)”的“數(shù)據(jù)集”中下載 chapter5-data1.txt,該數(shù)據(jù)集包含了某大

    2024年03月25日
    瀏覽(20)
  • 大數(shù)據(jù)技術(shù)原理與應(yīng)用實驗4——MapReduce初級編程實踐

    大數(shù)據(jù)技術(shù)原理與應(yīng)用實驗4——MapReduce初級編程實踐

    鏈接: 大數(shù)據(jù)技術(shù)原理與應(yīng)用實驗1——熟悉常用的HDFS操作 鏈接: 大數(shù)據(jù)技術(shù)原理與應(yīng)用實驗2——熟悉常用的Hbase操作 鏈接: 大數(shù)據(jù)技術(shù)原理與應(yīng)用實驗3——NoSQL和關(guān)系數(shù)據(jù)庫的操作比較 (1)通過實驗掌握基本的MapReduce編程方法; (2)掌握用MapReduce解決一些常見的數(shù)據(jù)處理

    2024年02月06日
    瀏覽(32)
  • 實驗5 MapReduce初級編程實踐(1)——編程實現(xiàn)文件合并和去重操作

    通過實驗掌握基本的MapReduce編程方法; 掌握用MapReduce解決一些常見的數(shù)據(jù)處理問題,包括數(shù)據(jù)去重、數(shù)據(jù)排序和數(shù)據(jù)挖掘等。 操作系統(tǒng):Linux(建議Ubuntu16.04或Ubuntu18.04) Hadoop版本:3.1.3 編程實現(xiàn)文件合并和去重操作 對于兩個輸入文件,即文件A和文件B,請編寫MapReduce程序,

    2023年04月15日
    瀏覽(26)
  • 云計算與大數(shù)據(jù)入門實驗四 —— MapReduce 初級編程實踐

    云計算與大數(shù)據(jù)入門實驗四 —— MapReduce 初級編程實踐

    通過實驗掌握基本的 MapReduce 編程方法 掌握用 MapReduce 解決一些常見的數(shù)據(jù)處理問題,包括數(shù)據(jù)去重、數(shù)據(jù)排序和數(shù)據(jù)挖掘等 (一)編程實現(xiàn)文件合并和去重操作 對于兩個輸入文件,即文件A和文件B,請編寫MapReduce程序,對兩個文件進(jìn)行合并,并剔除其中重復(fù)的內(nèi)容,得到一個

    2024年02月05日
    瀏覽(20)
  • 大數(shù)據(jù)技術(shù)原理及應(yīng)用課實驗5 :MapReduce初級編程實踐

    大數(shù)據(jù)技術(shù)原理及應(yīng)用課實驗5 :MapReduce初級編程實踐

    目錄 一、實驗?zāi)康?二、實驗平臺 三、實驗步驟(每個步驟下均需有運行截圖) (一)編程實現(xiàn)文件合并和去重操作 (二)編寫程序?qū)崿F(xiàn)對輸入文件的排序 (三)對給定的表格進(jìn)行信息挖掘 四、實驗總結(jié) 五、優(yōu)化及改進(jìn)(選做) 實驗5 ?MapReduce初級編程實踐 1. 通過實驗掌

    2024年01月21日
    瀏覽(29)
  • 大數(shù)據(jù)技術(shù)原理及應(yīng)用課實驗7 :Spark初級編程實踐

    大數(shù)據(jù)技術(shù)原理及應(yīng)用課實驗7 :Spark初級編程實踐

    實驗7 ?Spark初級編程實踐 一、實驗?zāi)康?1. 掌握使用Spark訪問本地文件和HDFS文件的方法 2. 掌握Spark應(yīng)用程序的編寫、編譯和運行方法 二、實驗平臺 1. 操作系統(tǒng):Ubuntu18.04(或Ubuntu16.04); 2. Spark版本:2.4.0; 3. Hadoop版本:3.1.3。 三、實驗步驟(每個步驟下均需有運行截圖) 實

    2024年01月22日
    瀏覽(27)
  • 實驗5 MapReduce初級編程實踐(3)——對給定的表格進(jìn)行信息挖掘

    通過實驗掌握基本的MapReduce編程方法; 掌握用MapReduce解決一些常見的數(shù)據(jù)處理問題,包括數(shù)據(jù)去重、數(shù)據(jù)排序和數(shù)據(jù)挖掘等。 操作系統(tǒng):Linux(建議Ubuntu16.04或Ubuntu18.04) Hadoop版本:3.1.3 下面給出一個child-parent的表格,要求挖掘其中的父子輩關(guān)系,給出祖孫輩關(guān)系的表格。

    2024年02月10日
    瀏覽(25)
  • 實驗5 MapReduce初級編程實踐(2)——編寫程序?qū)崿F(xiàn)對輸入文件的排序

    通過實驗掌握基本的MapReduce編程方法; 掌握用MapReduce解決一些常見的數(shù)據(jù)處理問題,包括數(shù)據(jù)去重、數(shù)據(jù)排序和數(shù)據(jù)挖掘等。 操作系統(tǒng):Linux(建議Ubuntu16.04或Ubuntu18.04) Hadoop版本:3.1.3 現(xiàn)在有多個輸入文件,每個文件中的每行內(nèi)容均為一個整數(shù)。要求讀取所有文件中的整數(shù)

    2024年02月09日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包