在Scala中读取大型csv文件的函数样式

在Scala中读取大型csv文件的函数样式,scala,functional-programming,Scala,Functional Programming,我不熟悉函数式编程和scala,所以我的问题似乎有点原始 是否有一种使用函数式读取scala中csv文件的特定方法?另外,如何使用函数式在scala中组合2个csv文件来执行内部联接 我知道spark,通常使用data frame,但对scala没有任何概念,在google上搜索也很困难,因为我对它不太了解。另外,如果有人知道scala函数式编程的好链接,那将是很大的帮助。这个问题确实太广泛了 是否有一种特定的方法可以使用函数读取scala中的csv文件 风格 到目前为止,我还不知道有哪条国王之

我不熟悉函数式编程和scala,所以我的问题似乎有点原始

是否有一种使用函数式读取scala中csv文件的特定方法?另外,如何使用函数式在scala中组合2个csv文件来执行内部联接


我知道spark,通常使用data frame,但对scala没有任何概念,在google上搜索也很困难,因为我对它不太了解。另外,如果有人知道scala函数式编程的好链接,那将是很大的帮助。

这个问题确实太广泛了

是否有一种特定的方法可以使用函数读取scala中的csv文件 风格

到目前为止,我还不知道有哪条国王之路可以让CSV完全不受麻烦地解析。 CSV解析包括

  • 逐行检查输入
  • 了解,如何处理(可选)标题
  • 根据CSV规范准确分析每一行
  • 将行部件转换为业务对象
我建议

  • 将输入转换为迭代器[字符串]
  • 使用您选择的库(例如,
    opencsv
    )将每一行拆分为多个部分
  • 从线零件手动创建所需的域对象
  • 下面是一个简单的示例(忽略错误处理和潜在的标题)


    阅读Paul Chiusano,Rúnar Bjarnason的“Scala中的函数编程”一些来自一些聪明人的例子——感谢Cell4和jacks的Emicare。这是否回答了你的问题?谢谢,很抱歉问这么宽泛的问题。但在scala中读取CSV文件时,函数样式是如何工作的呢?有什么例子可以参考吗?好的,我添加了一个例子
    case class Person(name: String, street: String)
    val lineParser = new CSVParserBuilder().withSeparator(',').build()
    val lines: Iterator[String] = Source.fromInputStream(new FileInputStream("file.csv")).getLines()
    val parsedObjects: Iterator[Person] = lines.map(line => {
      val parts: Array[String] = lineParser.parseLine(line)
      Person(parts(0), parts(1))
    })