标签: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: Lambdas Default Method Stream API Date 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 : Java Languages which ends with a Java Scala Print all languages : Java Scala C++ Haskell Lisp Print no language : Print language whose length greater than 4 : Scala Haskell |
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