MySQL+關(guān)聯(lián)(下)


飛谷云 MySQL 第3講

MySQL+表連接(下)

一窝革、MySQL+表連接(下)

1、內(nèi)連接(inner join):結(jié)果僅滿足條件的行

select * from T1,T2 where T1.stud_code=T2.stud_code;
select * from T1 inner join T2 ON T1.stud_code=T2.stud_code;#效率比上句高

2虐译、左連接(left outer join):
顯示左表T1中的所有行,并把右表T2中符合條件加到左表T1中侮攀;
右表T2中不符合條件,就不用加入結(jié)果表中撇叁,并且NULL表示税朴。

select * from T1 left outer join T2 ON T1.stud_code=T2.stud_code;

3家制、右連接(right outer join)
顯示右表T2中的所有行颤殴,并把左表T1中符合條件加到右表T2中鼻忠;
左表T1中不符合條件帖蔓,就不用加入結(jié)果表中,并且NULL表示澈侠。

4哨啃、全連接(full outer join)
顯示左表T1写妥、右表T2兩邊中的所有行珍特,即把左聯(lián)結(jié)果表 + 右聯(lián)結(jié)果表組合在一起扎筒,然后過濾掉重復(fù)的。

/*內(nèi)連接*/
select * from stud_info T1 ,stud_score T2 WHERE T1.stud_code=T2.stud_code;

select * from stud_info T1 inner join stud_score T2 ON T1.stud_code=T2.stud_code;
/*左連接*/
select * from stud_info T1 LEFT OUTER join stud_score T2 ON T1.stud_code=T2.stud_code;
/*右連接*/
select * from stud_info T1 RIGHT OUTER join stud_score T2 ON T1.stud_code=T2.stud_code;

二宋距、pandas 中的 DataFrame的表連接

  • 導(dǎo)入必要的包或模塊
import numpy as np
import pandas as pd
from pandas import DataFrame
import MySQLdb

兩個DataFrame數(shù)據(jù)集如何進(jìn)行關(guān)系谚赎?

df1=DataFrame({'key':['a','a','b','c','c'],'data1':range(5)})
df2=DataFrame({'key':['a','b','d'],'data1':range(3)})
  • 內(nèi)連接
df3=pd.merge(df1,df2,on='key')
df4=pd.merge(df1,df2,on='key',how='inner')
df5=pd.merge(df1,df2,left_on='key',right_on='key',how='inner')
#左連接
df_l=pd.merge(df1,df2,on='key',how='left')
#右連接
df_r=pd.merge(df1,df2,on='key',how='right')
#全連接
df_a=pd.merge(df1,df2,on='key',how='outer')
  • 兩個表結(jié)構(gòu)相同字段,自動添加后綴雳灵,_x,_y,我們也可以自定義闸盔,后綴,通過suffixes=(‘_left’躲撰,‘_right’)
df6=pd.merge(df1,df2,on='key',how='inner',suffixes=('_left','_right'))
#選擇數(shù)據(jù)
 df7=df6[['key','data1_right']]
#修改列名(data1_right改為data)
df8=df7.rename(columns={'data1_right':'data'})
#保存結(jié)果
df8.to_csv('data07.csv')
df8.to_csv('data07.csv',index=False,cols=['key','data'])##忽略行索引
  • 把MySQL數(shù)據(jù)庫表導(dǎo)入pandas
conn= MySQLdb.connect(host='localhost',port=3306,user='feigu_mysql', passwd='feigu2016', db='testdb',charset='utf8')
data2 = pd.read_sql('select * from stud_info', conn)
  • 如果文件較大拢蛋,也可可以逐塊讀蔫巩,如:chunksize=1000(行)
`inputfile1 = '/home/feigu/python_test/data/stud_score.csv'` 
#輸入的數(shù)據(jù)文件
`inputfile2 = '/home/feigu/python_test/data/stud_info.csv'` 
#輸入的數(shù)據(jù)文件

data1 = pd.read_csv(inputfile1) #讀取數(shù)據(jù)
data2 = pd.read_csv(inputfile2) #讀取數(shù)據(jù)
df1=DataFrame(data1)   #轉(zhuǎn)換為DataFrame格式
df2=DataFrame(data2)   #轉(zhuǎn)換為DataFrame格式
#如果要跳過一些行圆仔,可以加上參數(shù)坪郭,skiprow[0,2]
pd.read_csv(inputfile2,skiprow[0,2])跳過第1行,第3行
df.count()   #查看非NA值得數(shù)量
df.columns   #查看列名
df.<tab>     #查看df可以使用的方法

df.head(2)   #查看前2行
df.tail(2)   #查看倒數(shù)2行

三信姓、把數(shù)據(jù)導(dǎo)入Spark-SQL中的DataFrame結(jié)構(gòu)中

#把數(shù)據(jù)導(dǎo)入spark-rdd

#進(jìn)入交互式編程環(huán)境
spark-shell --master local[2]

==========使用scala語言==========


// 首先用已有的Spark Context對象創(chuàng)建SQLContext對象
val sqlContext = new org.apache.spark.sql.SQLContext(sc)

// 導(dǎo)入語句绸罗,可以隱式地將RDD轉(zhuǎn)化成DataFrame
import sqlContext.implicits._

// 創(chuàng)建一個表示stud的自定義類
case class stud_score(stud_code:String, sub_code:String, sub_name: String, sub_tech: String, sub_score: Int)
//用文件創(chuàng)建一個RDD
val rdd_st = sc.textFile("file:///home/hadoop/data/stud_score.csv")
//轉(zhuǎn)換為含case的rdd
val rdd_case=rdd_st.map(_.split(",")).map(p => stud_score(p(0), p(1), p(2), p(3), p(4).trim.toInt))
//把RDD轉(zhuǎn)換為DataFrame
val dfstud=rdd_case.toDF()

// 將DataFrame注冊為一個表
dfstud.registerTempTable("stud_score")


// 用sqlContext對象提供的sql方法執(zhí)行SQL語句菊值。
val result80 = sqlContext.sql("SELECT * FROM stud_score where sub_score>=80")
//顯示結(jié)果
result80.show()
result80.take(6)

//也可以保存
result80.rdd.saveAsTextFile("/home/hadoop/data")
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末腻窒,一起剝皮案震驚了整個濱河市磅崭,隨后出現(xiàn)的幾起案子儿子,更是在濱河造成了極大的恐慌,老刑警劉巖砸喻,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愉适,死亡現(xiàn)場離奇詭異维咸,居然都是意外死亡剂买,警方通過查閱死者的電腦和手機(jī)瞬哼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門费坊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來附井,“玉大人两残,你說我怎么就攤上這事人弓〈薅模” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長若贮。 經(jīng)常有香客問我,道長匾效,這世上最難降的妖魔是什么面哼? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任速缨,我火速辦了婚禮,結(jié)果婚禮上原茅,老公的妹妹穿的比我還像新娘。我一直安慰自己堕仔,他們只是感情好擂橘,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布通贞。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天卒暂,我揣著相機(jī)與錄音,去河邊找鬼削葱。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的陨囊。 我是一名探鬼主播弦疮,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蜘醋!你這毒婦竟也來了胁塞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤压语,失蹤者是張志新(化名)和其女友劉穎啸罢,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胎食,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伺糠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了斥季。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡累驮,死狀恐怖酣倾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谤专,我是刑警寧澤躁锡,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站置侍,受9級特大地震影響映之,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蜡坊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一杠输、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧秕衙,春花似錦蠢甲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搞糕。三九已至,卻和暖如春曼追,著一層夾襖步出監(jiān)牢的瞬間窍仰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工礼殊, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驹吮,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓膏燕,卻偏偏與公主長得像钥屈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子坝辫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容