目录
4、Prediction with Logistic Regression
Spark的简介
Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。
Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。
尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoop 文件系统中并行运行。通过名为 Mesos 的第三方集群框架可以支持此行为。Spark 由加州大学伯克利分校 AMP 实验室 (Algorithms, Machines, and People Lab) 开发,可用来构建大型的、低延迟的数据分析应用程序。
1、Spark三大特点
- Spark 应用开发者可以专注于应用所要做的计算本身:高级 API 剥离了对集群本身的关注,Spark 应用开发者可以专注于应用所要做的计算本身。
- Spark速度更快:Spark 很快,支持交互式计算和复杂算法。内存计算下,Spark 比 Hadoop 快100倍。使用最先进的DAG调度程序、查询优化器和物理执行引擎,实现了批处理和流数据的高性能。
- Spark易用性强:用Java、Scala、Python、R和SQL快速编写应用程序。Spark 提供了80多个高级运算符。是一个通用引擎,可用它来完成各种各样的运算,包括 SQL 查询、文本处理、机器学习等,而在 Spark 出现之前,我们一般需要学习各种各样的引擎来分别处理这些需求。
Spark的下载
Spark的经典案例
1、Word Count
1. text_file = sc.textFile("hdfs://...") 2. counts = text_file.flatMap(lambda line: line.split(" ")) \ 3. .map(lambda word: (word, 1)) \ 4. .reduceByKey(lambda a, b: a + b) 5. counts.saveAsTextFile("hdfs://...")
2、Pi Estimation
1. def inside(p): 2. x, y = random.random(), random.random() 3. return x*x + y*y < 1 4. 5. count = sc.parallelize(xrange(0, NUM_SAMPLES)) \ 6. .filter(inside).count() 7. print "Pi is roughly %f" % (4.0 * count / NUM_SAMPLES)
3、Text Search
1. textFile = sc.textFile("hdfs://...") 2. 3. # Creates a DataFrame having a single column named "line" 4. df = textFile.map(lambda r: Row(r)).toDF(["line"]) 5. errors = df.filter(col("line").like("%ERROR%")) 6. # Counts all the errors 7. errors.count() 8. # Counts errors mentioning MySQL 9. errors.filter(col("line").like("%MySQL%")).count() 10. # Fetches the MySQL errors as an array of strings 11. errors.filter(col("line").like("%MySQL%")).collect()
4、Prediction with Logistic Regression
1. # Every record of this DataFrame contains the label and 2. # features represented by a vector. 3. df = sqlContext.createDataFrame(data, ["label", "features"]) 4. 5. # Set parameters for the algorithm. 6. # Here, we limit the number of iterations to 10. 7. lr = LogisticRegression(maxIter=10) 8. 9. # Fit the model to the data. 10. model = lr.fit(df) 11. 12. # Given a dataset, predict each point's label, and show the results. 13. model.transform(df).show()