gpt4 book ai didi

scala - 编写在 Scala 中调用泛型函数的泛型函数

转载 作者:行者123 更新时间:2023-12-01 10:34:02 25 4
gpt4 key购买 nike

我正在使用 Spark 数据集读取 csv 文件。我想制作一个多态函数来为许多文件执行此操作。这是函数:

def loadFile[M](file: String):Dataset[M] = {
import spark.implicits._
val schema = Encoders.product[M].schema
spark.read
.option("header","false")
.schema(schema)
.csv(file)
.as[M]
}

我得到的错误是:

[error] <myfile>.scala:45: type arguments [M] do not conform to method product's type parameter bounds [T <: Product]
[error] val schema = Encoders.product[M].schema
[error] ^
[error] <myfile>.scala:50: Unable to find encoder for type stored in a Dataset. Primitive types (Int, String, etc) and Product types (case classes) are supported by importing spark.implicits._ Support for serializing other types will be added in future releases.
[error] .as[M]
[error] ^
[error] two errors found

我不知道如何处理第一个错误。我尝试添加与产品定义相同的差异 (M <: Product),但随后出现错误“M 没有可用的 TypeTag”

如果我传入已经从编码器生成的架构,则会收到错误:

[error] Unable to find encoder for type stored in a Dataset 

最佳答案

您需要要求任何调用loadFile[M] 的人提供证据证明M 有这样一个编码器。您可以通过在 M 上使用需要 Encoder[M] 的上下文边界来做到这一点:

def loadFile[M : Encoder](file: String): Dataset[M] = {
import spark.implicits._
val schema = implicitly[Encoder[M]].schema
spark.read
.option("header","false")
.schema(schema)
.csv(file)
.as[M]
}

关于scala - 编写在 Scala 中调用泛型函数的泛型函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45322763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com