Ale*_*thy 1 scala apache-spark spark-dataframe
我有一个固定长度的文件(一个示例如下所示),我想使用 SCALA(不是 python 或 java)在 Spark 中使用 DataFrames API 读取这个文件。使用 DataFrames API 有读取 textFile、json 文件等的方法,但不确定是否有读取固定长度文件的方法。我正在互联网上搜索这个并找到了一个 github链接,但我spark-fixedwidth-assembly-1.0.jar
为此目的下载了但是我无法在任何地方找出 jar。我完全迷失在这里,需要您的建议和帮助。Stackoverflow 中有几篇文章,但它们与 Scala 和 DataFrame API 无关。
这是文件
56 apple TRUE 0.56
45 pear FALSE1.34
34 raspberry TRUE 2.43
34 plum TRUE 1.31
53 cherry TRUE 1.4
23 orange FALSE2.34
56 persimmon FALSE23.2
Run Code Online (Sandbox Code Playgroud)
每列的固定宽度为 3, 10, 5, 4
请提出您的意见。
固定长度格式很旧,我找不到适合这种格式的好的 Scala 库……所以我创建了自己的。
你可以在这里查看:https : //github.com/atais/Fixed-Length
Spark 的使用非常简单,你会得到一个DataSet
你的对象!
您首先需要创建对象的描述,fe:
case class Employee(name: String, number: Option[Int], manager: Boolean)
object Employee {
import com.github.atais.util.Read._
import cats.implicits._
import com.github.atais.util.Write._
import Codec._
implicit val employeeCodec: Codec[Employee] = {
fixed[String](0, 10) <<:
fixed[Option[Int]](10, 13, Alignment.Right) <<:
fixed[Boolean](13, 18)
}.as[Employee]
}
Run Code Online (Sandbox Code Playgroud)
稍后只需使用解析器:
val input = sql.sparkContext.textFile(file)
.filter(_.trim.nonEmpty)
.map(Parser.decode[Employee])
.flatMap {
case Right(x) => Some(x)
case Left(e) =>
System.err.println(s"Failed to process file $file, error: $e")
None
}
sql.createDataset(input)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11743 次 |
最近记录: |