【问题标题】:Initializing Scala regex in PySpark for Scala class constructor在 PySpark 中为 Scala 类构造函数初始化 Scala 正则表达式
【发布时间】:2020-06-10 22:21:30
【问题描述】:

我在Jupyter笔记本采用PySpark v2.3.4运行于Java的8个工作,Python的3.6(与py4j == 0.10.7),和Scala 2.11和我有一个Scala的情况下类,它在一个scala.util.matching.Regexscala doc)作为像这样ARG:

case class myClass(myString: String, myRegex: Regex) 

我想从构建myClass一个对象,但我似乎无法找出如何构造一个scala.util.matching.Regex对象在Python / PySpark环境。下面是几个我尝试/文档的我已经按照创建斯卡拉正则表达式,其中sc我SparkContext。

  • sc._jvm.scala.util.matching.Regex("""(S|s)cala""")
    • 错误:Constructor scala.util.matching.Regex([class java.lang.String]) does not exist LI>
    • 此错误消息dumbfounds我因为Scala的2.11文档清楚说明它的构造需要在java.lang.String
  • sc._jvm.scala.util.matching.Regex("(S|s)cala")
    • 同样的错误如上 LI>
  • sc._jvm.scala.util.matching.Regex(r"(S|s)cala")
    • 同样的错误如上 LI>
  • sc._jvm.scala.util.matching.Regex("(S|s)cala".r)(他们这样做在斯卡拉的方式)
    • 错误:Python字符串不具有属性 “R” LI>
  • sc._jvm.java.util.regex.Pattern.compile("(S|s)cala")成功创建Java正则表达式模式 - 和Scala文档中明确指出,斯卡拉正则表达式,代表了Java正则表达式包...

任何帮助/建议将不胜感激!提前致谢!

【问题讨论】:

  • 所以根据this stackoverflow post似乎new Regex VS Regex()应该是大致相同的,其中前者使用正则表达式类的自己的构造,而后者是指伴侣对象的apply方法。我可能需要重载单斯卡拉功能。 SPAN>

标签: java python regex scala pyspark


【解决方案1】:

我想通了哈哈

Scala Regex 接受第二个参数groupNames。它是一个可变的字符串参数,它应该接受长度为 0 的 args 到您想要的任意数量的字符串参数。但是,在 Python 解释器中,这被视为必需参数,因此您必须将 None 传递到此参数中,以指示不填充第二个参数。

sc._jvm.scala.util.matching.Regex("(S|s)cala", None)

注意:我还没有弄清楚如何传递可变参数...传递逗号分隔的字符串、数组和元组不起作用...任何帮助都会非常感谢 :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-16
    相关资源
    最近更新 更多