spark 总结

1、partitionBy( ) 优化


有一张用户表 是 [UserID、UserAPP] 表一

还有一张表是每天都生成的表[UserId、UserDownloadAPP] 表二


表一和表二的 key值相同。 两张表需要进行不断的join,实时更新这张表1的数据。


不使用partition 时:

        

val sc = new SparkContext(...)
val userData = sc.sequenceFile[UserID,UserAPP]("hdfs://...").persist()

//周期性进行join
def processNewLogs(logFileName:String){
	val events = sc.quenceFile[UserId、UserDownloadAPP](logFileName)
	val joined = userData.join(events)
	val offTopocVisits = joined.filter{
		case (userId,(UserId、UserDownloadAPP)) => !userInfo.topics.cotains(linkInfo.topic)
	}.count
}




每次调用该函数时,都会进行网络传输跨节点混洗,进行hash分区。可以提前进行hash分区,将指标持久化。这样可以

可以使得userData 不在进行混洗,分区。

注:必须要持久化!否则瞎折腾!!!


val sc = new SparkContext(...)
val userData = sc.sequenceFile[UserID,UserAPP]("hdfs://...")
				 .partitionBy(new HashPartitioner(100))
				 .persist()



在python中,直接传入分区数量即可(rdd.partitionBy(100))


spark 和数据库的连接器

mysql的 JDBC

Cassandra

Hbase

Elasticsearch






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值