Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 在spark中循环浏览csv文件的最佳方法_Scala_Csv_Apache Spark_Spark Dataframe - Fatal编程技术网

Scala 在spark中循环浏览csv文件的最佳方法

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

我是新手。我将遵循文档中的一些基本示例

我有这样一个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.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>