从包含Map格式的数据的文件创建一个配置单元表(转发 - > 0,loc - > none)

问题描述 投票:0回答:1

如何从包含表单中的数据的文件创建配置单元表

地图(转发 - > 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")}
hadoop hive bigdata
1个回答
0
投票

正如我们在将数据加载到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;
© www.soinside.com 2019 - 2024. All rights reserved.