add redis group(WriteToRedis and ReadFromRedis)
This commit is contained in:
parent
bb2ddc60d3
commit
7ae7e6a888
|
@ -0,0 +1,39 @@
|
|||
{
|
||||
"flow":{
|
||||
"name":"test",
|
||||
"uuid":"1234",
|
||||
"stops":[
|
||||
{
|
||||
"uuid":"0000",
|
||||
"name":"SelectHiveQL",
|
||||
"bundle":"cn.piflow.bundle.hive.SelectHiveQL",
|
||||
"properties":{
|
||||
"hiveQL":"select * from sparktest.dblp_phdthesis"
|
||||
}
|
||||
|
||||
},
|
||||
{
|
||||
"uuid":"1111",
|
||||
"name":"ReadFromRedis",
|
||||
"bundle":"cn.piflow.bundle.redis.ReadFromRedis",
|
||||
"properties":{
|
||||
"redis_host":"10.0.88.9",
|
||||
"port":"7000",
|
||||
"password":"bigdata",
|
||||
"column_name":"title",
|
||||
"schema":"author,pages"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
],
|
||||
"paths":[
|
||||
{
|
||||
"from":"SelectHiveQL",
|
||||
"outport":"",
|
||||
"inport":"",
|
||||
"to":"ReadFromRedis"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
|
@ -0,0 +1,98 @@
|
|||
package cn.piflow.bundle.redis
|
||||
|
||||
|
||||
import java.util
|
||||
|
||||
import cn.piflow.bundle.util.{JedisClusterImplSer, RedisUtil}
|
||||
import cn.piflow.{JobContext, JobInputStream, JobOutputStream, ProcessContext}
|
||||
import cn.piflow.conf.{ConfigurableStop, FileGroup, RedisGroup, StopGroup}
|
||||
import cn.piflow.conf.bean.PropertyDescriptor
|
||||
import cn.piflow.conf.util.MapUtil
|
||||
import org.apache.avro.generic.GenericData.StringType
|
||||
import org.apache.spark.sql.catalyst.encoders.RowEncoder
|
||||
import org.apache.spark.sql.types.{DataType, StructField, StructType}
|
||||
import org.apache.spark.sql.{DataFrame, Row, SparkSession}
|
||||
import redis.clients.jedis.{HostAndPort, Jedis, JedisCluster}
|
||||
|
||||
import scala.collection.mutable.ArrayBuffer
|
||||
|
||||
|
||||
class ReadFromRedis extends ConfigurableStop{
|
||||
val inportCount: Int = 1
|
||||
val outportCount: Int = 0
|
||||
var redis_host:String =_
|
||||
var port:Int=_
|
||||
var password:String=_
|
||||
var column_name:String=_
|
||||
var schema:String=_
|
||||
|
||||
def perform(in: JobInputStream, out: JobOutputStream, pec: JobContext): Unit = {
|
||||
val spark = pec.get[SparkSession]()
|
||||
|
||||
var dfIn=in.read()
|
||||
var colName=column_name
|
||||
|
||||
//connect to redis
|
||||
val jedisCluster=new JedisClusterImplSer(new HostAndPort(redis_host,port),password)
|
||||
|
||||
//val keysArray:Array[String]=keys.split(",")
|
||||
val fields:Array[String]=schema.split(",")
|
||||
val col_str:String=column_name+","+schema
|
||||
val newSchema:Array[String]=col_str.split(",")
|
||||
//var res:List[List[String]]=List()
|
||||
|
||||
//import org.apache.spark.sql.types._
|
||||
val dfSchema=StructType(newSchema.map(f=>StructField(f,org.apache.spark.sql.types.StringType,true)))
|
||||
|
||||
|
||||
val newRDD=dfIn.rdd.map(line=>{
|
||||
import spark.implicits._
|
||||
val row=new ArrayBuffer[String]
|
||||
val key=line.getAs[String](colName)
|
||||
row += key
|
||||
for(j<-0 until fields.length){
|
||||
row += jedisCluster.getJedisCluster.hget(key,fields(j))
|
||||
}
|
||||
Row.fromSeq(row.toArray.toSeq)
|
||||
})
|
||||
//val df=spark.createDataFrame(newRDD,dfSchema)
|
||||
//newRDD.show(20)
|
||||
//out.write(df)
|
||||
}
|
||||
|
||||
def initialize(ctx: ProcessContext): Unit = {
|
||||
|
||||
}
|
||||
|
||||
|
||||
def setProperties(map: Map[String, Any]): Unit = {
|
||||
redis_host=MapUtil.get(map,key="redis_host").asInstanceOf[String]
|
||||
port=Integer.parseInt(MapUtil.get(map,key="port").toString)
|
||||
password=MapUtil.get(map,key="password").asInstanceOf[String]
|
||||
schema=MapUtil.get(map,key="schema").asInstanceOf[String]
|
||||
column_name=MapUtil.get(map,key="column_name").asInstanceOf[String]
|
||||
}
|
||||
|
||||
override def getPropertyDescriptor(): List[PropertyDescriptor] = {
|
||||
var descriptor : List[PropertyDescriptor] = List()
|
||||
val redis_host = new PropertyDescriptor().name("redis_host").displayName("REDIS_HOST").defaultValue("").required(true)
|
||||
val port = new PropertyDescriptor().name("port").displayName("PORT").defaultValue("").required(true)
|
||||
val password = new PropertyDescriptor().name("password").displayName("PASSWORD").defaultValue("").required(true)
|
||||
val schema = new PropertyDescriptor().name("schema").displayName("SCHEMA").defaultValue("").required(true)
|
||||
val column_name = new PropertyDescriptor().name("column_name").displayName("COLUMN_NAME").defaultValue("").required(true)
|
||||
descriptor = redis_host :: descriptor
|
||||
descriptor = port :: descriptor
|
||||
descriptor = password :: descriptor
|
||||
descriptor = schema :: descriptor
|
||||
descriptor = column_name :: descriptor
|
||||
descriptor
|
||||
}
|
||||
|
||||
override def getIcon(): Array[Byte] = ???
|
||||
|
||||
override def getGroup(): StopGroup = {
|
||||
RedisGroup
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -0,0 +1,70 @@
|
|||
package cn.piflow.bundle.redis
|
||||
|
||||
|
||||
import cn.piflow.bundle.util.{JedisClusterImplSer, RedisUtil}
|
||||
import cn.piflow.{JobContext, JobInputStream, JobOutputStream, ProcessContext}
|
||||
import cn.piflow.conf.{ConfigurableStop, FileGroup, RedisGroup, StopGroup}
|
||||
import cn.piflow.conf.bean.PropertyDescriptor
|
||||
import cn.piflow.conf.util.MapUtil
|
||||
import org.apache.spark.sql.{DataFrame, SparkSession}
|
||||
import redis.clients.jedis.{HostAndPort}
|
||||
|
||||
|
||||
class WriteToRedis extends ConfigurableStop{
|
||||
val inportCount: Int = 1
|
||||
val outportCount: Int = 0
|
||||
var redis_host:String =_
|
||||
var port:Int=_
|
||||
var password:String=_
|
||||
var column_name:String=_
|
||||
//var schema_str:String=_
|
||||
|
||||
def perform(in: JobInputStream, out: JobOutputStream, pec: JobContext): Unit = {
|
||||
val spark = pec.get[SparkSession]()
|
||||
val df = in.read()
|
||||
var col_name:String=column_name
|
||||
|
||||
println(df.schema)
|
||||
//connect to redis
|
||||
var jedisCluster=new JedisClusterImplSer(new HostAndPort(redis_host,port),password)
|
||||
df.collect.foreach(row=> {
|
||||
RedisUtil.manipulateRow(row,col_name,jedisCluster)
|
||||
})
|
||||
//val v=jedisCluster.getJedisCluster.hmget("Python","author","pages")
|
||||
val v=jedisCluster.getJedisCluster.hkeys("Python")
|
||||
println(v)
|
||||
}
|
||||
|
||||
def initialize(ctx: ProcessContext): Unit = {
|
||||
|
||||
}
|
||||
|
||||
|
||||
def setProperties(map: Map[String, Any]): Unit = {
|
||||
redis_host=MapUtil.get(map,key="redis_host").asInstanceOf[String]
|
||||
port=Integer.parseInt(MapUtil.get(map,key="port").toString)
|
||||
password=MapUtil.get(map,key="password").asInstanceOf[String]
|
||||
column_name=MapUtil.get(map,key="column_name").asInstanceOf[String]
|
||||
}
|
||||
|
||||
override def getPropertyDescriptor(): List[PropertyDescriptor] = {
|
||||
var descriptor : List[PropertyDescriptor] = List()
|
||||
val redis_host = new PropertyDescriptor().name("redis_host").displayName("REDIS_HOST").defaultValue("").required(true)
|
||||
val port = new PropertyDescriptor().name("port").displayName("PORT").defaultValue("").required(true)
|
||||
val password = new PropertyDescriptor().name("password").displayName("PASSWORD").defaultValue("").required(true)
|
||||
val column_name = new PropertyDescriptor().name("column_name").displayName("COLUMN_NAME").defaultValue("").required(true)
|
||||
descriptor = redis_host :: descriptor
|
||||
descriptor = port :: descriptor
|
||||
descriptor = password :: descriptor
|
||||
descriptor = column_name :: descriptor
|
||||
descriptor
|
||||
}
|
||||
|
||||
override def getIcon(): Array[Byte] = ???
|
||||
|
||||
override def getGroup(): StopGroup = {
|
||||
RedisGroup
|
||||
}
|
||||
|
||||
|
||||
}
|
Loading…
Reference in New Issue