新手求助:在Scala中加载10万行CSV文件至DataFrame
加载10万行CSV到Scala DataFrame 新手指南
第一步:配置项目依赖(SBT)
如果是用IntelliJ创建的Scala SBT项目,打开build.sbt文件,添加适配你Scala版本的Spark SQL依赖(示例用Scala 2.12对应Spark 3.3.x):
name := "CsvToDataFrame" version := "0.1" scalaVersion := "2.12.15" libraryDependencies ++= Seq( "org.apache.spark" %% "spark-sql" % "3.3.2" % Provided )
注:
Provided表示打包时不包含该依赖,避免和运行环境的Spark冲突;本地调试时可以暂时去掉,但建议保留。
第二步:编写核心加载代码
创建一个Scala对象(比如CsvLoader.scala),写入以下代码:
import org.apache.spark.sql.SparkSession import org.apache.spark.sql.types.{StringType, IntegerType, StructField, StructType} object CsvLoader { def main(args: Array[String]): Unit = { // 初始化SparkSession(Spark应用的入口) val spark = SparkSession.builder() .appName("LoadLargeCsv") .master("local[*]") // 本地运行,自动使用所有可用CPU核心 .getOrCreate() // 方法1:自动推断Schema(适合快速验证,10万行完全够用) val dfAuto = spark.read .option("header", "true") // 告知Spark第一行是表头 .option("inferSchema", "true") // 自动识别列的数据类型 .csv("/your/csv/file/path.csv") // 替换成你的CSV文件实际路径 // 方法2:手动指定Schema(生产环境更高效,避免推断耗时) val customSchema = StructType(Array( StructField("col1", StringType, nullable = true), StructField("col2", IntegerType, nullable = true), StructField("col3", StringType, nullable = true), StructField("col4", IntegerType, nullable = true), StructField("col5", StringType, nullable = true) )) // 根据你的实际列类型修改字段名和类型 val dfManual = spark.read .option("header", "true") .schema(customSchema) // 使用手动定义的Schema .csv("/your/csv/file/path.csv") // 验证数据是否加载成功 println(s"总数据行数:${dfAuto.count()}") dfAuto.show(5) // 打印前5行数据 // 关闭SparkSession spark.stop() } }
第三步:运行注意事项
- 在IntelliJ里右键点击
CsvLoader对象,选择"Run 'CsvLoader'"即可启动程序。 - 如果弹出内存不足提示,打开Run Configuration,在VM options里添加
-Xmx4g(分配4G内存,可根据你的电脑配置调整)。 - CSV路径可以用绝对路径(比如
C:/data/your_file.csv或/home/user/data/your_file.csv),也可以把文件放在项目resources目录下,用相对路径src/main/resources/your_file.csv。
内容的提问来源于stack exchange,提问作者Kacie
相关产品推荐
相关产品推荐

