【发布时间】: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