簡體   English   中英

Apache Spark中的正則表達式

[英]Regex in Apache Spark

我有一個文本文件,內容如下:

可以用立式攪拌機或用碗,
木勺和結實的手臂。 如果您使用咸黃油,請省略
在這個食譜中加了鹽。
百勝
配料
1 1/4杯通用面粉(160克)
1/4茶匙鹽
1/2茶匙發酵粉
室溫下1/2杯無鹽黃油(1條或8湯匙或112克)
1/2杯白糖(90克)
1/2杯深紅糖,包裝(85克)
1個大雞蛋
1茶匙香草精
1/2茶匙速溶咖啡顆粒或速溶咖啡粉
1/2杯切碎的澳洲堅果(3 1/2盎司或100克)
1/2杯白巧克力片
方法
1將烤箱預熱至350°F(175°C)。 大力攪拌面粉,
和發酵粉放在碗里,放在一旁。

我想提取“成分”和“方法”一詞之間的數據。
我寫了一個正則表達式(?s)(?<=\\bIngredients\\b).*?(?=\\bMethod\\b)
提取數據,並且工作正常。
但是當我嘗試像下面這樣使用spark-shell時,它並沒有給我
任何東西。

val b = sc.textFile("/home/akshat/file.txt")
val regex = "(?s)(?<=\bIngredients\b).*?(?=\bMethod\b)".r
regex.findAllIn(b).foreach(println)

請告訴我我要去哪里錯了,應該采取什么步驟
糾正這個嗎?
提前致謝!

您需要做的是

  1. 使用WholeTextFiles讀取文件(因此它不會折行,並且您可以一起讀取整個數據)
  2. 編寫一個使用字符串並使用該正則表達式輸出字符串的函數,因此,它看起來像(在python中)

大段引用

def getWhatIneed(s):
    output = <my regexp>
    return output

b = sc.WholeTextFiles(...)
c = b.map(getWhatIneed)

現在,c也是一個RDD。 您需要先收集它,然后再打印。 collect的輸出是一個普通的數組/列表

print c.collect()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM