【问题标题】:how to get scala string split to match python如何让scala字符串拆分以匹配python
【发布时间】:2015-05-02 22:24:26
【问题描述】:

我正在使用 spark-shell 和 pyspark 对一篇文章进行字数统计。 scala flatmap on line.split(" ") 和 python split() 获得不同的字数(scala 有更多)。我在 scala 代码中尝试了 split(" +") 和 split("\W+") ,但无法让计数降到与 python 相同。

有人知道什么模式会与 python 完全匹配吗?

【问题讨论】:

  • 你能把你的代码贴在这里吗?

标签: python scala split apache-spark


【解决方案1】:

Python 的 str.split() 对默认分隔符有一些特殊行为:

连续的空格被视为单个分隔符,如果字符串有前导或尾随空格,则结果将在开头或结尾不包含空字符串。因此,使用None 分隔符拆分空字符串或仅包含空格的字符串将返回[]

例如,' 1 2 3 '.split() 返回['1', '2', '3']

在 Scala 中完全匹配它的最简单方法可能是这样的:

scala> """\S+""".r.findAllIn(" 1  2   3  ").toList
res0: List[String] = List(1, 2, 3)

scala> """\S+""".r.findAllIn("   ").toList
res1: List[String] = List()

scala> """\S+""".r.findAllIn("").toList
res2: List[String] = List()

另一种方法是预先trim()字符串:

scala> " 1  2   3  ".trim().split("""\s+""")
res3: Array[String] = Array(1, 2, 3)

但这与 Python 处理空字符串的行为不同:

scala> "".trim().split("""\s+""")
res4: Array[String] = Array("")

在 Scala split() 中,空字符串返回一个包含 one 元素的数组,但在 Python 中,结果是一个包含 个元素的列表。

【讨论】:

    猜你喜欢
    • 2014-02-05
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多