版权声明:本文为博主九师兄(QQ群:spark源代码 198279782 欢迎来探讨技术)原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_21383435/article/details/82938787
1.maven镜像
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lcc</groupId>
<artifactId>drools_test</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<drools.version>7.11.0.Final</drools.version>
<lombok.version>1.18.0</lombok.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-compiler</artifactId>
<version>${drools.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.drools/drools-core -->
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-core</artifactId>
<version>${drools.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-core -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.spark/spark-streaming -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_2.11</artifactId>
<version>2.2.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.kie</groupId>
<artifactId>kie-maven-plugin</artifactId>
<version>${drools.version}</version>
<extensions>true</extensions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
2. 实体类:
package entity;
import lombok.Data;
/**
* Created by lcc on 2018/9/28.
*/
@Data
public class Person {
private int id;
private String name ;
private int count;
public Person() {
}
public Person(String name, int count) {
this.name = name;
this.count = count;
}
public Person(int id, String name, int count) {
this.id = id;
this.name = name;
this.count = count;
}
}
3.测试类
package com.spark;
import entity.Apple;
import entity.Person;
import org.apache.log4j.Logger;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.api.java.function.VoidFunction;
import org.apache.spark.streaming.Durations;
import org.apache.spark.streaming.api.java.JavaDStream;
import org.apache.spark.streaming.api.java.JavaReceiverInputDStream;
import org.apache.spark.streaming.api.java.JavaStreamingContext;
import org.drools.core.impl.InternalKnowledgeBase;
import org.drools.core.impl.KnowledgeBaseFactory;
import org.kie.api.definition.KiePackage;
import org.kie.api.io.ResourceType;
import org.kie.api.runtime.StatelessKieSession;
import org.kie.internal.builder.KnowledgeBuilder;
import org.kie.internal.builder.KnowledgeBuilderFactory;
import org.kie.internal.io.ResourceFactory;
import java.io.File;
import java.net.URLDecoder;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Collection;
/**
* 同卡号单日最大交易金额测试
* @author ll-t150
*
*/
public class SparkDroolsTest {
public static Logger logger = Logger.getLogger(SparkDroolsTest.class);
public static final DateFormat df = new SimpleDateFormat("yyyyMMdd");
public static void main(String[] args) throws Exception {
SparkConf conf = new SparkConf().setMaster("local[4]").setAppName("NetworkWordCount").set("spark.testing.memory",
"2147480000");
JavaStreamingContext jssc = new JavaStreamingContext(conf, Durations.seconds(5));
System.out.println(jssc);
// Create a DStream that will connect to hostname:port, like
// localhost:9999
JavaReceiverInputDStream<String> lines = jssc.socketTextStream("lcc", 9999);
JavaDStream<Person> mapRDD = lines.map(new Function<String, Person>() {
@Override
public Person call(String s) throws Exception {
String[] danci = s.split(" ");
if( danci.length == 2 ){
Person apple = new Person();
apple.setName(danci[0]);
apple.setCount(Integer.parseInt(danci[1]));
return apple;
}
return null;
}
});
mapRDD.foreachRDD(new VoidFunction<JavaRDD<Person>>() {
@Override
public void call(JavaRDD<Person> appleJavaRDD) throws Exception {
appleJavaRDD.foreach(new VoidFunction<Person>() {
@Override
public void call(Person apple) throws Exception {
if( apple != null ){
System.out.println("id: " + apple.getName());
System.out.println("proice: " + apple.getCount());
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
String filePath = SparkDroolsTest.class.getClassLoader().getResource("com.rules/Matches.drl").getPath();
File file = new File(URLDecoder.decode(filePath,"utf-8"));
kbuilder.add(ResourceFactory.newFileResource(file), ResourceType.DRL);
InternalKnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
Collection<KiePackage> ss = kbuilder.getKnowledgePackages();
kbase.addPackages(ss);
StatelessKieSession ksession = kbase.newStatelessKieSession();
Person person=new Person(apple.getName(),apple.getCount());
ksession.execute(person);
}
}
});
}
});
jssc.start();
//System.out.println(wordCounts.count());// Start the computation
jssc.awaitTermination(); // Wait for the computation to terminate
}
}
4.规则
/Users/lcc/IdeaProjects/drools_test/src/main/resources/com.rules/Matches.drl
package com.rules
import entity.School
import entity.Person
rule test002
when
$p:Person(name matches "张.*");
then
System.out.println("恭喜你,包含张 成功的使用了 matches");
end
5.测试
在命令行窗口里执行
lcc@lcc ~$ nc -lk 9999
张三 20
李四 30
张飞 50
王五 10
打印结果如下
id: 张三
proice: 20
18/10/04 17:01:35 INFO Executor: Running task 1.0 in stage 7.0 (TID 13)
18/10/04 17:01:35 INFO BlockManager: Found block input-0-1538643691000 locally
id: 王五
proice: 10
18/10/04 17:01:35 INFO BlockManagerInfo: Removed broadcast_6_piece0 on 192.168.0.17:52908 in memory (size: 1458.0 B, free: 1048.8 MB)
18/10/04 17:01:35 INFO Executor: Finished task 1.0 in stage 7.0 (TID 13). 751 bytes result sent to driver
18/10/04 17:01:35 INFO TaskSetManager: Finished task 1.0 in stage 7.0 (TID 13) in 230 ms on localhost (executor driver) (1/2)
恭喜你,包含张 成功的使用了 matches
id: 李四
proice: 30
id: 张飞
proice: 50
恭喜你,包含张 成功的使用了 matches