标签:line for 技术 lambda函数 管理 自带 graphx 线程 级别
Apache Spark是一个围绕速度、易用性和复杂分析构建的大数据处理框架。
与 Hadoop 和 Storm 等其他大数据和 MapReduce 技术相比,Spark 有如下优势。
Spark 将中间结果保存在内存中而不是将其写入磁盘,当需要多次处理同一数据集时,这一点特别实用。
Spark 是用Scala 程序设计语言编写而成,运行于 Java 虚拟机(JVM)环境之上。目前支持如下程序设计语言编写 Spark 应用:
除了 Spark 核心 API 之外,Spark 生态系统中还包括其他附加库,可以在大数据分析和机器学习领域提供更多的能力。
这些库包括:
除了这些库以外,还有一些其他的库,如 BlinkDB 和 Tachyon。
BlinkDB是一个近似查询引擎,用于在海量数据上执行交互式 SQL 查询。BlinkDB 可以通过牺牲数据精度来提升查询响应时间。通过在数据样本上执行查询并展示包含有意义的错误线注解的结果,操作大数据集合。
Tachyon是一个以内存为中心的分布式文件系统,能够提供内存级别速度的跨集群框架(如 Spark 和 MapReduce)的可信文件共享。它将工作集文件缓存在内存中,从而避免到磁盘中加载需要经常读取的数据集。通过这一机制,不同的作业 / 查询和框架可以以内存级的速度访问缓存的文件。
现在Runnable线程,Swing,JavaFX的事件监听器代码等,在java 8中你可以使用Lambda表达式替代丑陋的匿名类。
//Before Java 8:new Thread(new Runnable() { @Override public void run() { System.out.println("Before Java8 "); }}).start();//Java 8 way:new Thread(() -> System.out.println("In Java8!"));// Before Java 8:JButton show = new JButton("Show");show.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("without lambda expression is boring"); } });// Java 8 way:show.addActionListener((e) -> { System.out.println("Action !! Lambda expressions Rocks");}); |
外循环:描述怎么干,代码里嵌套2个以上的for循环的都比较难读懂;只能顺序处理List中的元素;
内循环:描述要干什么,而不是怎么干;不一定需要顺序处理List中的元素
//Prior Java 8 :List features = Arrays.asList("Lambdas", "Default Method","Stream API", "Date and Time API");for (String feature : features) { System.out.println(feature);}//In Java 8:List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");features.forEach(n -> System.out.println(n));// Even better use Method reference feature of Java 8// method reference is denoted by :: (double colon) operator// looks similar to score resolution operator of C++features.forEach(System.out::println);Output:LambdasDefault MethodStream APIDate and Time API |
为了支持函数编程,Java 8加入了一个新的包java.util.function,其中有一个接口java.util.function.Predicate是支持Lambda函数编程:
public static void main(args[]){ List languages = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp"); System.out.println("Languages which starts with J :"); filter(languages, (str)->str.startsWith("J")); System.out.println("Languages which ends with a "); filter(languages, (str)->str.endsWith("a")); System.out.println("Print all languages :"); filter(languages, (str)->true); System.out.println("Print no language : "); filter(languages, (str)->false); System.out.println("Print language whose length greater than 4:"); filter(languages, (str)->str.length() > 4);} public static void filter(List names, Predicate condition) { names.stream().filter((name) -> (condition.test(name))) .forEach((name) -> {System.out.println(name + " "); }); }Output:Languages which starts with J :JavaLanguages which ends with aJavaScalaPrint all languages :JavaScalaC++HaskellLispPrint no language :Print language whose length greater than 4:ScalaHaskell |
Java 8里面新增的Stream API ,让集合中的数据处理起来更加方便,性能更高,可读性更好
假设一个业务场景:对于20元以上的商品,进行9折处理,最后得到这些商品的折后价格。
final BigDecimal totalOfDiscountedPrices = prices.stream().filter(price -> price.compareTo(BigDecimal.valueOf(20)) > 0).map(price -> price.multiply(BigDecimal.valueOf(0.9))).reduce(BigDecimal.ZERO,BigDecimal::add);System.out.println("Total of discounted prices: " + totalOfDiscountedPrices); |
想象一下:如果用面向对象处理这些数据,需要多少行?多少次循环?需要声明多少个中间变量?
Lambda测试:
import java.util.Arrays;
import java.util.List;
import org.junit.Test;
public class LambdaTest {
@Test
public void testInnerClass() throws InterruptedException {
//Before Java 8:
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Before Java8 ");
}
}).start();
new Thread(() -> System.out.println("After Java8")).start();
Thread.sleep(1000L);
}
}

List<String> features = Arrays.asList("Lambdas","123","456","789");
for(String feature : features) {
System.out.println(feature);
}


标签:line for 技术 lambda函数 管理 自带 graphx 线程 级别
原文地址:https://www.cnblogs.com/linjunMo/p/11007948.html