【问题标题】:Converting a JSON file to pyspark dataframe and then to RDD将 JSON 文件转换为 pyspark 数据帧,然后再转换为 RDD
【发布时间】:2017-12-29 08:12:22
【问题描述】:

我有一个格式如下的 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 文件。我尝试使用拆分和替换等功能将其删除。但它不起作用。有人可以帮我删除这些吗?

有没有比这更好的方法来提取提及?

【问题讨论】:

    标签: python json dataframe pyspark rdd


    【解决方案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"))
    

    这解决了编码问题。

    【讨论】:

      【解决方案2】:

      开头的 u'' 是因为它是一个 unicode 对象。你可以很容易地将它转换为字符串格式。

      你可以参考this来了解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))
      

      【讨论】:

      • 添加上述内容后,我收到一个 unicode 错误。错误是 UnicodeEncodeError: 'ascii' codec can't encode character u'\u2026' in position 0: ordinal not in range(128).. 知道如何解决这个问题吗?
      • 我使用 encode() 而不是 str(x) 解决了这个问题。感谢您的帮助
      猜你喜欢
      • 2017-01-25
      • 1970-01-01
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      相关资源
      最近更新 更多