繁体   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