2016-12-08 122 views
0

我在斯卡拉一個小白,因此有一個很難實現這個..拆分場打進子場階火花

所以,我有這樣一個數據:

foo::bar::baz\tbleh\t1234 

所以,我創建保存數據如

foo\tbar\tbaz\tbleh\t1234 

val data = sc.textFile("filename").map(line=>line.split("\t")) 

但是,如何拆分數組中的第一個元素。

我的意思是在pyspark這可以作爲

def format(line): 
    chunks = line.split("\t") 
    ele_1 = chunks[0].split("::") 
    arr = [ele[0], ele[1], ele[2], chunks[1], chunks[2]] 
    return "\t".join(arr) 
data = sc.textFile("filename").map(lambda x:format(x)) 

做什麼是階等同?

+0

是您的數據foo :: bar :: baz \ tbleh \ t1234「\ t」也是字符串或它是製表符分隔符。 –

+0

@SandeepPurohit是的..對不起..基本上有一個製表符分隔的文件..想法是拆分第一個字段(通過「::」),然後再次存儲爲製表符分隔文件 – Fraz

回答

2

使用replaceAll用給定的字符串替換所有出現的::

假設\t是字符串不是標籤空間

scala> """foo::bar::baz\tbleh\t1234""".replaceAll("::", """\\t""") 
res4: String = foo\tbar\tbaz\tbleh\t1234 

假設\t是標籤空間

scala> "foo::bar::baz\tbleh\t1234".replaceAll("::", "\t") 
res7: String = foo bar baz bleh 1234 

你的代碼變得

sc.textFile("filename").map(_.replaceAll("::", "\t")) 
1

如果是標籤分離器使用以下

val data = sc.textFile("filename").map(line=>line.split("\t")) 
data.map(line=> line.replaceAll("::","\t")).saveAsTextFile("file path where you want to store")