【问题标题】:How to perform basic statistics on a csv file to explore my numeric and non-numeric variables with Spark Scala?如何对 csv 文件执行基本统计,以使用 Spark Scala 探索我的数字和非数字变量?
【发布时间】:2015-08-03 09:49:19
【问题描述】:

我已经导入了一个像这样的 csv 文件:

MR; IT;  UPI; CAE; IIL;                ED;   NS;                  DATE; DUIOD;NBOPP;
30;  0; null;   2;   0; bgpel:10PT-MIP   ; null; 2013-05-20 21:03:00.0;   300;null;
20;  0; null;   4;   1; bzrgfel:125TZ-ATR; null; 2013-04-01 19:50:02.0;   302;null; 
10;  2; null;   2;   0; bhtuyel:105MF-AXI; null; 2013-04-26 17:12:00.0;   298;null;

我是 Spark 的新手,我想执行基本统计数据,例如

  • 获取数值变量的最小值、最大值、平均值、中值和标准值
  • 获取非数值变量的值频率。

我的问题是:

  • 使用哪种类型的对象更好,以及如何将我的 csv 导入该类型(RDD、DataFrame、...)?
  • 如何轻松完成这些基本统计?

我尝试过使用 RDD,但可能有更好的方法:

val csv=sc.textFile("myFile.csv");  
val summary: MultivariateStatisticalSummary = Statistics.colStats(csv)

我收到如下错误:

error: type mismatch;
found   : org.apache.spark.rdd.RDD[String]
required: org.apache.spark.rdd.RDD[org.apache.spark.mllib.linalg.Vector]

【问题讨论】:

  • 你必须解析你的文件以在单独的 RDD 中提取每一列
  • @ka4eli 你为什么要做这样的事情?
  • @SparkUser 即使您正确处理了您的输入,Statistics.colStats 在您的情况下也不起作用。它预计 RDD[Vector] 和 Vectrors 只能存储双精度数。您想对分类/有序变量计算什么样的统计数据?
  • 所以我只需要提取数值变量来做一个colStats,但我不知道如何提取它们。对于分类变量,我想计算模态的频率,但我不知道 Spak 中的哪个函数可以做到这一点。

标签: scala csv apache-spark


【解决方案1】:

在 github spark-csv 上有一个可用的开源库。您可以将其用于解析和其他转换。您还可以使用此代码直接将您的 csv 转换为数据帧。

sqlContext.read().format("com.databricks.spark.csv").options(Options).load();

【讨论】:

    猜你喜欢
    • 2015-10-21
    • 1970-01-01
    • 2023-03-07
    • 2019-01-21
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    相关资源
    最近更新 更多