我正在考虑在Pyspark中创建一个虚拟变量数据集,并从hive表中加载数据并以RDD格式存储数据。
数据大小为20000000 * 11(行*列)
(在集群上)RDD将hive表转换为嵌套列表,我对处理它的方式感到困惑(与python不同)。
问题:有没有办法维护前两个变量( id 和 lable )并将新变量插入到identiy 标签(作为名义可变,例如group_1,group_2,基于条件分配)之前 获得虚拟变量编码(基于其余变量)
我曾尝试使用键值方法,但它无效。任何想法都将不胜感激。
期望的结果(dummuy编码) 伪编码(0,1)的长度由跨行的所有变量的唯一元素确定。
[u'007896797eed11ba73dd', u'18-24', 0, 0, 0,0,0,0,0,1,1,1,1]
例如,上述用户未安装 ins_com.meitu.meipaimv ,因此它将为0,如果 ins_com.meitu.xxxx 安装然后它是1
示例数据:
[[u'007896797eed11ba73dd', u'18-24', u'ins_com.meitu.meipaimv,ins_com.babytree.apps.pregnancy,ins_com.sankuai.meituan,ins_cn.damai,ins_com.google.android.gms,ins_com.taobao.taobao,ins_com.sina.weibo,ins_com.google.android.syncadapters.calendar,ins_com.tencent.qqmusic,ins_com.tencent.mm,ins_com.lemon.faceu,ins_com.zhihu.android,ins_com.Qunar,ins_com.eg.android.AlipayGphone,ins_com.airbnb.android,ins_com.lingan.seeyou,ins_com.qicai.translate,ins_com.mt.mtxx.mtxx,ins_vz.com,ins_com.ganji.android,ins_com.google.android.gsf,ins_com.taobao.trip,ins_com.mfw.roadbook,ins_com.tencent.mobileqq', u'act_cn.damai,act_com.taobao.trip,act_com.sankuai.meituan,act_com.google.android.gms,act_com.eg.android.AlipayGphone,act_com.tencent.mm,act_com.sina.weibo,act_com.babytree.apps.pregnancy,act_com.taobao.taobao,act_com.meitu.meipaimv,act_com.mfw.roadbook,act_com.zhihu.android,act_com.mt.mtxx.mtxx', u'inst_ct_21_40', u'installed1', u'inst_cate_ct_13_16', u'active_ct_10_20', u'activ_1', u'phone_price_2500_3500', u''], [u'4ac74594b0fe17b532e7f278', u'25-34', u'ins_com.easysay.japanese,ins_com.tencent.mobileqq,ins_com.eg.android.AlipayGphone,ins_com.google.android.syncadapters.calendar,ins_com.zhaopin.social,ins_com.taobao.taobao,ins_com.kugou.android,ins_com.sina.weibo,ins_com.tencent.qqlive,ins_cmb.pb,ins_com.android.browser,ins_com.baidu.searchbox,ins_com.sohu.inputmethod.sogou,ins_cn.wps.moffice_eng,ins_com.qiyi.video,ins_com.tencent.mm,ins_com.autonavi.minimap,ins_com.luojilab.player,ins_com.liulishuo.engzo', u'act_com.zhaopin.social,act_com.tencent.mm,act_com.sina.weibo', u'inst_ct_0_20', u'installed12,installed9', u'inst_cate_ct_9_12', u'active_ct_4_5', u'activ_12', u'phone_price_801_1500', u'']]
答案 0 :(得分:0)
首先找到完整的元素并修复订单。
然后将数据maping到此集。
data_rdd = sc.parallelize([[u'007896797eed11ba73dd', u'18-24', u'ins_com.meitu.meipaimv,ins_com.babytree.apps.pregnancy,ins_com.sankuai.meituan,ins_cn.damai,ins_com.google.android.gms,ins_com.taobao.taobao,ins_com.sina.weibo,ins_com.google.android.syncadapters.calendar,ins_com.tencent.qqmusic,ins_com.tencent.mm,ins_com.lemon.faceu,ins_com.zhihu.android,ins_com.Qunar,ins_com.eg.android.AlipayGphone,ins_com.airbnb.android,ins_com.lingan.seeyou,ins_com.qicai.translate,ins_com.mt.mtxx.mtxx,ins_vz.com,ins_com.ganji.android,ins_com.google.android.gsf,ins_com.taobao.trip,ins_com.mfw.roadbook,ins_com.tencent.mobileqq', u'act_cn.damai,act_com.taobao.trip,act_com.sankuai.meituan,act_com.google.android.gms,act_com.eg.android.AlipayGphone,act_com.tencent.mm,act_com.sina.weibo,act_com.babytree.apps.pregnancy,act_com.taobao.taobao,act_com.meitu.meipaimv,act_com.mfw.roadbook,act_com.zhihu.android,act_com.mt.mtxx.mtxx', u'inst_ct_21_40', u'installed1', u'inst_cate_ct_13_16', u'active_ct_10_20', u'activ_1', u'phone_price_2500_3500', u''], [u'4ac74594b0fe17b532e7f278', u'25-34', u'ins_com.easysay.japanese,ins_com.tencent.mobileqq,ins_com.eg.android.AlipayGphone,ins_com.google.android.syncadapters.calendar,ins_com.zhaopin.social,ins_com.taobao.taobao,ins_com.kugou.android,ins_com.sina.weibo,ins_com.tencent.qqlive,ins_cmb.pb,ins_com.android.browser,ins_com.baidu.searchbox,ins_com.sohu.inputmethod.sogou,ins_cn.wps.moffice_eng,ins_com.qiyi.video,ins_com.tencent.mm,ins_com.autonavi.minimap,ins_com.luojilab.player,ins_com.liulishuo.engzo', u'act_com.zhaopin.social,act_com.tencent.mm,act_com.sina.weibo', u'inst_ct_0_20', u'installed12,installed9', u'inst_cate_ct_9_12', u'active_ct_4_5', u'activ_12', u'phone_price_801_1500', u'']])
split_data_rdd = data_rdd.map(lambda x: (x[0], x[1], set(x[2].split(","))))
elements_set = sorted(split_data_rdd\
.map(lambda x: x[2]).reduce(lambda x,y: x | y))
print elements_set
split_data_rdd_dummy_encoding = split_data_rdd\
.map(lambda x: (x[0], x[1], [1 if y in x[2] else 0 for y in elements_set]))
print split_data_rdd_dummy_encoding.collect()
结果:
[u'ins_cmb.pb', u'ins_cn.damai', u'ins_cn.wps.moffice_eng', u'ins_com.Qunar', u'ins_com.airbnb.android', u'ins_com.android.browser', u'ins_com.autonavi.minimap', u'ins_com.babytree.apps.pregnancy', u'ins_com.baidu.searchbox', u'ins_com.easysay.japanese', u'ins_com.eg.android.AlipayGphone', u'ins_com.ganji.android', u'ins_com.google.android.gms', u'ins_com.google.android.gsf', u'ins_com.google.android.syncadapters.calendar', u'ins_com.kugou.android', u'ins_com.lemon.faceu', u'ins_com.lingan.seeyou', u'ins_com.liulishuo.engzo', u'ins_com.luojilab.player', u'ins_com.meitu.meipaimv', u'ins_com.mfw.roadbook', u'ins_com.mt.mtxx.mtxx', u'ins_com.qicai.translate', u'ins_com.qiyi.video', u'ins_com.sankuai.meituan', u'ins_com.sina.weibo', u'ins_com.sohu.inputmethod.sogou', u'ins_com.taobao.taobao', u'ins_com.taobao.trip', u'ins_com.tencent.mm', u'ins_com.tencent.mobileqq', u'ins_com.tencent.qqlive', u'ins_com.tencent.qqmusic', u'ins_com.zhaopin.social', u'ins_com.zhihu.android', u'ins_vz.com']
[(u'007896797eed11ba73dd', u'18-24', [0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1]), (u'4ac74594b0fe17b532e7f278', u'25-34', [1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0])]