2016-11-11 15 views
1

我是PySpark的新手。我用熊貓拉了一個csv文件。 並使用registerTempTable函數創建臨時表。PySpark SQL中的左和右函數

from pyspark.sql import SQLContext 
from pyspark.sql import Row 
import pandas as pd 
sqlc = SQLContext(sc) 

aa1 = pd.read_csv("D:\mck1.csv") 

aa2 = sqlc.createDataFrame(aa1) 

aa2.show() 

+--------+-------+----------+------------+---------+------------+-------------------+ 
| City|  id|First_Name|Phone_Number|new_date|new  code|   New_date| 
+--------+-------+----------+------------+---------+------------+-------------------+ 
|KOLKATTA|9000007|  AAA| 1111119411| 20080714|   13|2016-08-16 00:00:00| 
|KOLKATTA|9000007|  BBB| 1111119421| 20080714|   13|2016-08-06 00:00:00| 
|KOLKATTA|9000007|  CCC| 1111119461| 20080714|   13|2016-08-13 00:00:00| 
|KOLKATTA|9000007|  DDD| 1111119471| 20080714|   13|2016-08-27 00:00:00| 
|KOLKATTA|9000007|  EEE| 1111119491| 20080714|   13|2016-08-15 00:00:00| 
|KOLKATTA|9111147|  FFF| 1111119401| 20080714|   13|2016-08-24 00:00:00| 
|KOLKATTA|9585458| FORMULA| 1111110112| 19990930|   13|2016-08-16 00:00:00| 
|KOLKATTA|9569878| APPLEII| 1111110132| 19990930|   13|2016-08-06 00:00:00| 

aa3 = aa2.registerTempTable("mytable1") 

sqlc.sql(""" select right(phone_number,4) from mytable1 """).show() 

現在,我嘗試使用的電話號碼右邊拉過去四個字符使用權(PHONE_NUMBER,4)和麪向followung錯誤

​​

爲什麼pyspark不支持左右功能? 我怎樣才能爲一列提供四個字符的權利?

回答

5

看着documentation,你有沒有試過子串函數?

pyspark.sql.functions.substring(str, pos, len)[source] 

編輯

根據您的評論,你可以得到的最後四個這樣的:

from pyspark.sql.functions import substring 

df = sqlContext.createDataFrame([('abcdefg',)], ['s',]) 
df.select(substring(df.s, -4, 4).alias('s')).collect() 
+0

從技術文檔我們可以使用substring(phone_number,1,4)作爲left(phone_number,4),我怎樣才能使用子字符串r ight(phone_number,4) – Green

+0

已編輯 - 請參閱上面的註釋 – flyingmeatball

0

,而不是正確的,嘗試用RPAD:

sqlc.sql(""" select rpad(phone_number, 4, phone_number) from mytable1 """).show() 
+0

面向錯誤:Py4JJavaError:調用o55.sql時發生錯誤。 :java.util.noSuchElementException:key not found:rpad – Green