当前位置: 首页 > 知识库问答 >
问题:

隐式在Spark/Scala中如何工作[重复]

魏健柏
2023-03-14

下面是一个示例火花代码,它将序列转换为数据集:

import spark.implicits._
val s = Seq(1, 2, 3, 4)
val ds = s.toDS()

Scalaseq没有tods方法,它来自Spark Implicits。这里的数据集是如何创建的?

编辑:我确实看过其他SO答案,但没有看到一个示例,说明如何在s.tods中使用隐式。我在评论中参考了示例答案。

共有1个答案

郦兴德
2023-03-14

Scala有一种向现有类添加方法的方法,比如Kotlin中的extension method(我记得还有C#),但它是以不同的方式进行的,通过隐含。

要将方法添加到现有类中,首先创建隐式类:

object StringImplicits {
  implicit class StringUtils(s: String) {
    def someCoolMethod = println("Yooo")
  }
}

object Application extends App {
    import StringImplicits._
    val s = "Hello"
    s.someCoolMethod
}

导入此StringUtils并可以对String的实例调用SomEcoolMethod

注意,StringUtils类将String作为构造函数参数。

string上调用某个方法时,scala编译器首先在string类中查找这个方法。

如果找不到,它将会看到导入的隐式类,这些类接受stringparam。

如果没有找到这样的类,它将引发错误。

 类似资料:
  • 问题内容: 假设我有以下文件, 现在,如果我跑步,它说。 这是有道理的,并且按照此链接中的以下语句运行: “它将首先在包的目录中查找” 假设我稍微修改了文件结构(添加了一个核心目录): 现在,如果我运行,它将加载内置模块。 同样在第二种情况下,如果必须遵守“ 它将首先在软件包的目录中查找 ” 这样 的语句 ,是否 应该加载本地文件,因为它是“软件包的目录”? 我的术语“包目录”的意义是 明确 的

  • 目前,我使用按列重新分区和分区数将数据移动到特定分区。该列标识相应的分区(从0开始到(固定)n)。结果是Scala/Spark生成了一个意想不到的结果,并创建了更少的分区(其中一些是空的)。也许是哈希碰撞? 为了解决这个问题,我试图找出原因,试图找到变通办法。我找到了一个解决办法,将dataframe转换为rdd,并将partitionBy与HashPartitioner一起使用。令我惊讶的是:我

  • 提示:它应该看起来像隐式的[固体](... 太感谢你了!

  • 在Spark中是如何工作的? 如果我们注册一个对象作为一个表,会将所有数据保存在内存中吗?

  • 我在Spark中有一个数据框架,其中包含许多列和我定义的udf。我想要返回相同的数据帧,除了一列被转换。此外,我的udf接收字符串并返回时间戳。有一个简单的方法可以做到这一点吗?我试过了 但这返回一个RDD,并且只返回转换后的列。

  • 我正在IntelliJ中尝试使用scala工作表运行spark测试。但是在或的实例化行,工作表抛出以下错误 有人能帮我解决这个问题吗?