调用 Scala 方法,将数据帧的每一行作为输入传递



我有一个数据帧,里面有两列,已经创建了一个导入.txt文件。

示例文件内容:

Sankar Biswas, Played{"94"}
Puja "Kumari" Jha, Didnot
Man Women, null
null,Gay Gentleman
null,null

创建了一个导入上述文件的数据帧::

val a = sc.textFile("file:////Users/sankar.biswas/Desktop/hello.txt")
case class Table(contentName: String, VersionDetails: String)
val b = a.map(_.split(",")).map(p => Table(p(0).trim,p(1).trim)).toDF

现在我定义了一个函数,让我们这样说::

  def getFormattedName(contentName : String, VersionDetails:String): Option[String] = {
    Option(contentName+titleVersionDesc)
  }

现在我需要做的是我必须获取数据帧的每一行并调用方法 getFormattedName,传递数据帧每行的 2 个参数。

我尝试过这样的和许多其他人,但没有成功::

val a = b.map((m,n) => getFormattedContentName(m,n))

期待您对我的任何建议。提前谢谢。

我认为你有一个结构化的模式,它可以用一个数据帧来表示。数据帧支持读取 csv 输入。

import org.apache.spark.sql.types._
val customSchema = StructType(Array(StructField("contentName", StringType, true),StructField("titleVersionDesc", StringType, true)))
val df = spark.read.schema(customSchema).csv("input.csv")

若要在数据集上调用自定义方法,可以创建 UDF(用户定义函数)。

def getFormattedName(contentName : String, titleVersionDesc:String): Option[String] = {
    Option(contentName+titleVersionDesc)
  }
val get_formatted_name = udf(getFormattedName _)
df.select(get_formatted_name($"contentName", $"titleVersionDesc"))

尝试

val a = b.map(row => getFormattedContentName(row(0),row(1)))

请记住,数据帧的行是它们自己的类型,而不是元组或其他东西,您需要使用正确的方法来引用它们的元素。

相关内容

  • 没有找到相关文章

最新更新