gpt4 book ai didi

scala - 如何将 double 组的文件转换为 spark 中的数据帧?

转载 作者:行者123 更新时间:2023-12-01 07:39:37 25 4
gpt4 key购买 nike

我是 Scala 和 Apache Spark 的新手。我的文本文件包含如下条目:

[-0.9704851405656525,1.0286638765434661]
[-0.9704851405656525,1.0286638765434661]
[-1.0353873234576638,-0.001849782262230898]
[-0.9704851405656525,1.0286638765434661]
[-0.9704851405656525,1.0286638765434661]
....

我想从中创建数据框。要使用 sql 查询,我的代码看起来像这样,

def processr(str:String) = str.replaceAll("\\[", "").replaceAll("\\]","")
case class Result(a:Double, b:Double)
val filemat = sc.textFile("mat.txt")
val result = filemat.map(s => s.split(',').map(r=>Result(processr(r[0]).toDouble, processr(r[1]).toDouble)).toDF.cache

我得到这样的错误,

<console>:1: error: identifier expected but integer literal found.
val result = filemat.map(s => s.split(',').map(r=>Result(processr(r[0]).toDouble, processr(r[1]).toDouble)).toDF.cache

我不确定我在代码中犯了什么错误。看来,我的拆分方法不正确。谁能建议我如何隐藏到 Dataframes 中?提前致谢。

最佳答案

您应该使用圆括号而不是方括号。在 Scala 中从数组中提取只是一个 apply 方法调用:

scala> val r = "[-0.9704851405656525,1.0286638765434661]".split(",")
r: Array[String] = Array([-0.9704851405656525, 1.0286638765434661])

scala> r.apply(0)
res4: String = [-0.9704851405656525

还有一些语法糖:

scala> r(0)
res5: String = [-0.9704851405656525

接下来你的 map 看起来不对。当你调用 s.split 时,你会得到一个 Array[String] 所以 r 实际上是一个 Stringr(0) 为您提供 - 或第一个数字。你可能想要这样的东西:

filemat.map(_.split(',') match {
case Array(s1, s2) => Result(processr(s1).toDouble, processr(s2).toDouble)
})

它可以通过使用正则表达式的模式匹配来简化:

val p =  "^\\[(-?[0-9]+\\.[0-9]+),(-?[0-9]+\\.[0-9]+)\\]$".r

filemat.map{
case p(s1, s2) => Result(s1.toDouble, s2.toDouble)
}

或者使用Row.fromSeq方法:

val schema = StructType(Seq(
StructField("a", DoubleType, false),
StructField("b", DoubleType, false)))

val p1 = "(-?[0-9]+\\.[0-9]+)".r

sqlContext.createDataFrame(filemat.map(s =>
Row.fromSeq(p1.findAllMatchIn(s).map(_.matched.toDouble).toSeq)),
schema)

关于scala - 如何将 double 组的文件转换为 spark 中的数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33013051/

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