scala 相关的博客比较少,并且查询总总跳转到 spark 相关的内容,这里记录一下 scala 读取 csv 文件的操作过程(未找到合适的依赖库,自己实现同样简单)。
需要注意自己需要知道 csv 文件有几列,然后再使用 split 方法将其划分成两个对象。
import scala.collection.mutable.ArrayBuffer
import scala.io.Source
* 读取 csv 文件
* @param filename
def read_csv(filename: String) : Seq[(Long, Double)] = {
val src = Source.fromFile(filename)
val timestamp_value: ArrayBuffer[String] = ArrayBuffer()
for (line <- src.getLines()) {
if (line.nonEmpty && line.contains(",")) {
timestamp_value.append(line.trim)
val series = timestamp_value.tail.map(str => {
val pair = str.split(",")
(formatted.parse(pair(0)).getTime, java.lang.Double.parseDouble(pair(1)))
src.close()
series
测试一下上面代码输出结果为:
scala 代码总体而言比较简单方便,并且可以支持 java 的部分代码,因此如果开发中遇到问题可以考虑搜索 java 如何解决,并使用 java 的解决方法解决问题,这里提供一个参考方法,scala 如何读取 csv 文件,并返回 Seq[(Long, Double)] 类型的结果。
Smileyan
2022.09.15 21:44
scala-csv
生成.sbt
libraryDependencies + = " com.github.tototoshi " %% " scala-csv " % " 1.3.8 "
scala > import com . github . tototoshi . csv . _
样本.csv
a,b,c
d,e,f
您可以使用 CSVReader#open 创建 CSVReader 实例。
scala > val reader = CSVReader .open( new File ( " sample.csv " ))
读取所有行
scala > val reader = CSVReader .open( new File ( " sample.csv " ))
reader : com.github.tototoshi.csv. CSVReade
val saveOptions = Map("header" -> "true", "path" -> "file:///F:/test.csv")
df.repartition(1)
.write.mode(SaveMode.Overwrite).format("csv")
.options(saveOptions)
.save()
df.coalesce(1)
.write.mode(SaveMode.Append).opti
众所周知,csv文件默认以逗号“,”分割数据,那么在scala命令行里查询的数据:
可以看见,字段里就包含了逗号“,”,那接下来切割的时候,这本应该作为一个整体的字段会以逗号“,”为界限进行切割为多个字段。
现在来看看这里的_c0字段一共有多少行记录。
记住这个数字:60351行
写scala代码读取csv文件并以逗号为分隔符来分割字段
val lineRDD = sc.textFile("xxxx/xxx.csv").map(_.split(","))
这里只读取了_c0一个字段,否则会报数组下标越
/** * 通过CSV文件,及其预处理的字段类型字符串,输出insert语句 */
class csv2InsertSQLServer {
/** * @param CLASS_PATH 输入/输出路径
* @param inFilename 输入文件名
* @param tableN...
import org.apache.spark.SparkConf
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._
object Dataframe_demo_01 {
case class student11(name: String, course: String, score: String)
def main(args: Array[String]): Unit = {
spark
读取csv文件——
scala
下面介绍如何通过
scala读取csv文件
读取的过程是首先按照普通额文本
文件进行
读取,然后通过open
csv的jar包进行转换,通过对每行进行
读取,生成string数组。
好,下面上货。
import
java.io.StringReader
import au.com.bytecode.open
csv.
CSVReader
object CC{
最近的业务场景中,spark要读取 1个30G的 csv文件,生成RDD后做运算,光这一个 parse 就用了1个半小时,太慢了,后来请大佬帮我优化,我们统计时间发现 ,spark 读取这个csv 竟然用了 30分钟,太慢了。而且后面跑运算的时候,一直是3个分区在跑,我们推测读取文件的时候 partition 少了。
关于spark 优化,网上有很多,我这里只把我这次的优化记录下来 ,希望能帮助新人。
老的读取csv,生成RDD的代码如下(这一部分读取文件生成RDD就用了30分钟):
val csv
Spark使用Java读取mysql数据和保存数据到mysql一、pom.xml二、spark代码2.1 Java方式2.2 Scala方式三、写入数据到mysql中部分博文原文信息
一、pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"...
Scala 的集合分为三大类序列Seq,集Set 以及映射Map。所有的集合都扩展自 Iterable 特质在 Scala 中集合有可变(“scala.collection.mutable” 包下存放)和不可变(“scala.collection.immutable” 包下存放)两种类型。