java - 在 PySpark 中为 Scala 类构造函数初始化 Scala 正则表达式

标签 java python regex scala pyspark

我正在使用 PySpark v2.3.4 的 Jupyter Notebook 工作,该笔记本在 Java 8、Python 3.6(py4j==0.10.7)和 Scala 2.11 上运行,并且我有一个 Scala 案例类,它接受 scala.util.matching.Regex ( scala doc ) 作为参数,如下所示:

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

我想从 myClass 构造一个对象,但我似乎不知道如何在 Python 中构造 scala.util.matching.Regex 对象/PySpark 环境。下面是我创建 Scala 正则表达式的一些尝试/文档,其中 sc 是我的 SparkContext。

  • sc._jvm.scala.util.matching.Regex("""(S|s)cala""")
    • 错误:构造函数 scala.util.matching.Regex([class java.lang.String]) 不存在
    • 这个错误消息让我大吃一惊,因为 Scala 2.11 文档明确指出它的构造函数接受 java.lang.String
  • sc._jvm.scala.util.matching.Regex("(S|s)cala")
    • 与上面相同的错误
  • sc._jvm.scala.util.matching.Regex(r"(S|s)cala")
    • 与上面相同的错误
  • sc._jvm.scala.util.matching.Regex("(S|s)cala".r)(他们在 Scala 中的做法)
    • 错误:Python 字符串没有属性“r”
  • sc._jvm.java.util.regex.Pattern.compile("(S|s)cala") 成功创建了 Java 正则表达式模式 - 并且 scala 文档明确指出 Scala regex 委托(delegate)给 Java regex 包...

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

最佳答案

我明白了哈哈

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

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

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

关于java - 在 PySpark 中为 Scala 类构造函数初始化 Scala 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62314073/

相关文章:

java - Spring 在 MongoDB 中将 Date 保存为 String - 无法从 String 类型转换为 Date 类型

python - 如何导入 `module`类?

php - 用户名正则表达式字母数字,仅带下划线

java - 如何实现扩展apply方法? java

java - 代理如何在 Hibernate/JPA 中加载惰性属性

python - 具体数字和四舍五入到小数点后两位的数字之和

Python 排序算法

javascript - 检测字符串中的全部大写

r - 如何使用gsub和regex来识别和删除连续的符号?

java - JSONProvider 返回空对象,例如 String