为了在使用 Python 和 Scala 时比较 Spark 的性能,我在两种语言中创建了相同的作业并比较了运行时。我预计这两个作业花费的时间大致相同,但 Python 作业只花费了27min,而 Scala 作业花费了37min(几乎长了 40%!)。我也在 Java 中实现了同样的工作,而且它也完成37minutes了。Python 怎么可能这么快?
最小可验证示例:
蟒蛇作业:
# Configuration
conf = pyspark.SparkConf()
conf.set("spark.hadoop.fs.s3a.aws.credentials.provider", "org.apache.hadoop.fs.s3a.AnonymousAWSCredentialsProvider")
conf.set("spark.executor.instances", "4")
conf.set("spark.executor.cores", "8")
sc = pyspark.SparkContext(conf=conf)
# 960 Files from a public dataset in 2 batches
input_files = "s3a://commoncrawl/crawl-data/CC-MAIN-2019-35/segments/1566027312025.20/warc/CC-MAIN-20190817203056-20190817225056-00[0-5]*"
input_files2 = "s3a://commoncrawl/crawl-data/CC-MAIN-2019-35/segments/1566027312128.3/warc/CC-MAIN-20190817102624-20190817124624-00[0-3]*"
# Count occurances of a certain string
logData = sc.textFile(input_files)
logData2 = sc.textFile(input_files2)
a = logData.filter(lambda value: value.startswith('WARC-Type: response')).count()
b = logData2.filter(lambda value: value.startswith('WARC-Type: response')).count()
print(a, b) …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个正则表达式,该正则表达式匹配使用以下规则创建的动词的第三人称形式:
如果动词以e结尾,而不是i,o,s,x,z,ch,sh,则添加s.
所以我正在寻找匹配由一些字母组成的单词的正则表达式,然后不是 i,o,s,x,z,ch,sh,然后是"es".我试过这个:
\b\w*[^iosxz(sh)(ch)]es\b
Run Code Online (Sandbox Code Playgroud)
根据regex101它匹配"喜欢","讨厌"等.然而,它不匹配"沐浴",为什么不呢?
我正在研究一个函数,该函数使用正则表达式在作为参数给出的(很长)字符串中查找一些产品代码。
该代码有多种可能的形式,例如:
UK[A-z]{10}或DE[A-z]{20}或PL[A-z]{7}或...
什么解决方案会更好?许多(很可能大约 20-50 个)小的正则表达式或一个匹配它们的巨大的正则表达式?就性能而言,什么更好?