首页 文章

将JSON文件转换为pyspark数据帧,然后转换为RDD

提问于
浏览
-1

我有一个以下格式的json文件,我将其转换为pyspark Dataframe . 转换后的数据帧如下 .

以下是推文数据框:

+-------------+--------------------+-------------------+
|     tweet_id|               tweet|               user|
+-------------+--------------------+-------------------+
|1112223445455|@xxx_yyyzdfgf @Yoko |             user_1|
|1112223445456|sample test tweet   |             user_2|
|1112223445457|test mention @xxx_y |             user_1|
|1112223445458|testing @yyyyy      |             user_3|
|1112223445459|@xxx_yyzdfgdd @frnd |             user_4|
+-------------+--------------------+-------------------+

我现在正试图从列中提取所有提及(以“@”开头的单词) - 推文 .

我是通过将其转换为RDD并使用以下代码拆分所有行来完成的 .

tweets_rdd = tweets_df.select("tweet").rdd.flatMap(list)
tweets_rdd_split=tweets_rdd.flatMap(lambda text:text.split(" ")).filter(lambda word:word.startswith('@')).map(lambda x:x.split('@')[1])

现在我的输出格式如下 .

[u'xxx_yyyzdfgf',
 u'Yoko',
 u'xxx_y',
 u'yyyyy',
 u'xxx_yyzdfgdd',
 u'frnd']

每一行都在 u' ' 内提及 . 我认为它出现是因为初始文件是一个json文件 . 我尝试使用拆分和替换等功能删除它 . 但它不起作用 . 有人可以帮我删除这些吗?

提取提及是否有比这更好的方法?

2 回答

  • 1

    最初我试过

    tweets_rdd_split = tweets_rdd_split.map(lambda x: str(x))
    

    正如pisall所建议的那样,删除了unicodes .

    但是在推文中有外来字符在使用str(x)时导致编码错误 . 因此我使用以下内容来纠正这个问题 .

    tweets_rdd_split = tweets_rdd_split.map(lambda x: x.encode("ascii","ignore"))
    

    这解决了编码问题 .

  • 1

    开始你是因为它是一个unicode对象..你可以很容易地将它转换为字符串格式 .

    你可以参考这个来理解unicode和string之间的区别 . What is the difference between u' ' prefix and unicode() in python?

    您可以使用lambda函数映射列

    tweets_rdd_split = tweets_rdd_split.map(lambda x: str(x))
    

相关问题