Scala 在spark中循环浏览csv文件的最佳方法
我是新手。我将遵循文档中的一些基本示例 我有这样一个csv文件:(简化版,真实版有近40000行) 这段scala代码可以很好地计算类别总数Scala 在spark中循环浏览csv文件的最佳方法,scala,csv,apache-spark,spark-dataframe,Scala,Csv,Apache Spark,Spark Dataframe,我是新手。我将遵循文档中的一些基本示例 我有这样一个csv文件:(简化版,真实版有近40000行) 这段scala代码可以很好地计算类别总数 val textFile = sc.textFile("sample.csv") textFile.filter(line => line.contains("1990")).filter(line =>line.contains("peaches")).count() textFile.filter(line => line.conta
val textFile = sc.textFile("sample.csv")
textFile.filter(line => line.contains("1990")).filter(line =>line.contains("peaches")).count()
textFile.filter(line => line.contains("1990")).filter(line => line.contains("apples")).count()
textFile.filter(line => line.contains("1990")).filter(line => line.contains("pears")).count()
通过每一行循环,按年份添加类别总数的最佳方法是什么,这样我就可以编写如下csv文件:
date,apples,peaches,pears
1990,2,2,1
1991,3,1,1
1992,1,2,2
任何帮助都将不胜感激。//创建Spark SQL上下文
//Create Spark SQL Context
val sqlContext = new SQLContext(sc)
//read csv
var df = sqlContext.read.format("com.databricks.spark.csv")
.option("header", "true")
.option("inferSchema", "true")
.load("sample.csv")
df = df.withColumn("year", df.col("date").substr(0,4))
df = df.groupBy("year").pivot("category").agg("category"->"count")
df.withColumn("total", df.col("apples").+(df.col("peaches")).+(df.col("pears"))).show()
//Dependency required:
<dependency>
<groupId>com.databricks</groupId>
<artifactId>spark-csv_2.10</artifactId>
<version>1.4.0</version>
</dependency>
val sqlContext=新的sqlContext(sc)
//读取csv
var df=sqlContext.read.format(“com.databricks.spark.csv”)
.选项(“标题”、“正确”)
.选项(“推断模式”、“真”)
.load(“sample.csv”)
df=带列的df(“年”,df.col(“日期”)。子项(0,4))
df=df.groupBy(“年度”).pivot(“类别”).agg(“类别”->“计数”)
df.withColumn(“总计”,df.col(“苹果”)。+(df.col(“桃子”))。+(df.col(“梨”)).show()
//需要依赖项:
com.databricks
spark-csv_2.10
1.4.0
的可能副本最近发布,它现在具有本机CSV支持:)感谢VenkatN的回答。过去几天我一直不舒服,所以我没能早点看这个。当我运行这个脚本时,我在这一行得到一条“error reassignment val”消息:df=df.withColumn(“year”,df.col(“date”).substr(0,4)),带Spark 2,0这是否意味着我没有包含DataRicks csv包?出于同样的原因,我将“df”声明为var而不是val。因此,为了避免“错误重新分配val”,您必须做同样的事情,或者您可以初始化一个新变量,而不是将其重新分配给df,比如:val df2=df.withColumn(“year”,df.col(“date”).substr(0,4))
df2.groupBy(“year”).pivot(“category”).agg(“category”->“count”).show()
。我的错误是使用“val df”而不是“var df”。过去几天我一直在与感冒作斗争,我无法正确思考,如果我想要一个总计列,那么我的CSV文件将如下所示:日期、总计、苹果、桃子、梨1990,5,2,2,1请检查更新的答案,这将对您有所帮助。
//Create Spark SQL Context
val sqlContext = new SQLContext(sc)
//read csv
var df = sqlContext.read.format("com.databricks.spark.csv")
.option("header", "true")
.option("inferSchema", "true")
.load("sample.csv")
df = df.withColumn("year", df.col("date").substr(0,4))
df = df.groupBy("year").pivot("category").agg("category"->"count")
df.withColumn("total", df.col("apples").+(df.col("peaches")).+(df.col("pears"))).show()
//Dependency required:
<dependency>
<groupId>com.databricks</groupId>
<artifactId>spark-csv_2.10</artifactId>
<version>1.4.0</version>
</dependency>