如何从包含表单中的数据的文件创建配置单元表
地图(转发 - > 0,位置 - >无,情感 - >中性,文字 - >这是班加罗尔另一个保存最完好的秘密。看看吧!想分享这个城市的秘密吗?发送给他们我们...,语言 - > en,created_at - > 1528369782000,user - > BangaloreTimes1,hashtags - > [Ljava.lang.String; @ 6acc78cc)
下面的代码是生成o / p。
englishtweets.foreachRDD{(rdd, time) =>
rdd.map(t => {
Map(
"user"-> t.getUser.getScreenName,
"created_at" -> t.getCreatedAt.getTime.toString,
"location" -> Option(t.getGeoLocation).map(geo => { s"${geo.getLatitude},${geo.getLongitude}" }),
"text" -> t.getText,
"hashtags" -> t.getHashtagEntities.map(_.getText),
"retweet" -> t.getRetweetCount,
"language" -> t.getLang.toString(),
"sentiment" -> detectSentiment(t.getText).toString
)
}).saveAsTextFile("output.txt")
如果我不必附加每条推文的情绪,我可以直接将其存储为Json(下面的代码)。
englishtweets.foreachRDD{(rdd, time) =>
rdd.saveAsTextFile("output")}
正如我们在将数据加载到Hive表之前,我们发现您的数据需要通过RDD进行数据清理或数据转换。
stackdata = sc.textFile("/user/<filepath>/stackdata.txt")
使用“map”转换映射数据
stackmap =stackdata.map(lambda oi:(oi.split(",")[0],oi.split(",")[1],oi.split(",")[2],oi.split(",")[3],oi.split(",")[4],oi.split(",")[5],oi.split(",")[6],oi.split(",")[7],))
上面的输出步骤:(u'p(转推 - > 0',你'位置 - >无',你感情 - >中性',你'文字 - >这是班加罗尔另一个保存最好的秘密。看看吧!想要分享这个城市的秘密吗?发送给我们,我们用“你们的语言 - > en',你们'创建__ - > 1528369782000',用户 - > BangaloreTimes1',你们的主题标签 - > [Ljava.lang .String; @ 6acc7cc)')
我们再次重新应用地图功能以进行更多转换
stackremap = stackmap.map(lambda oi:((oi[0].split("->")[0],oi[0].split("->")[1]),(oi[1].split("->")[0],oi[1].split("->")[1]),(oi[2].split("->")[0],oi[2].split("->")[1]),(oi[3].split("->")[0],oi[3].split("->")[1]),(oi[4].split("->")[0],oi[4].split("->")[1]),(oi[5].split("->")[0],oi[5].split("->")[1]),(oi[6].split("->")[0],oi[6].split("->")[1]),(oi[7].split("->")[0],oi[7].split("->")[1])))
上面的输出步骤:((u'p(转发',你'0'),(你'位置',你'无'),(你'感情',你'中性'),(你的''', “这是班加罗尔另一个保存最完好的秘密。看看吧!想分享这个城市的秘密吗?发送给我们,我们会”(u'language',u'en'),(你'created_at' ,你'1528369782000'),(你'用户',你'BangaloreTimes1'),(你'hashtags',你'[Ljava.lang.String; @ 6acc7cc)'))
最后一步,
stackfinal = stackremap.map(lambda oi:(oi[0][1],oi[1][1],oi[2][1],oi[3][1],oi[4][1],oi[5][1],oi[6][1],oi[7][1]))
您将以逗号分隔格式获得结果输出。
最后的输出:(你们'0',你们没有',你们中性',“这是班加罗尔另一个保存最好的秘密。看看吧!想分享这个城市的秘密吗?发送给我们,我们就是这样的” ,u'en',u'1528369782000',你'BangaloreTimes1',你'[Ljava.lang.String; @ 6acc7cc)')
现在,您可以将数据加载到表中。
注意:我们转换的结果数据集是字符串,在执行Hive操作时,我们需要将其转换为所需的数据类型。
蜂巢表供参考
create table tweetdata(retweet varchar(20),location int,sentiment varchar(20),text varchar(20),language varchar(20),createdat varchar(20),user varchar(20),hashtags varchar(20))row format delimited fields terminated by ',' stored as textfile;