首页 > 解决方案 > Spark SQL,不尊重 Dataframe 格式

问题描述

我正在使用 Spark SQL 以 JSON 格式分析 Twitter 文件,以获取热门话题

在将所有文本从 Tweet 中取出并拆分单词后,我的 dataFrame 看起来像这样

 +--------------------+--------------------+
 |                line|               words|
 +--------------------+--------------------+
 |[RT, @ONLYRPE:, #...|                  RT|
 |[RT, @ONLYRPE:, #...|           @ONLYRPE:|
 |[RT, @ONLYRPE:, #...|               #tlrp|
 |[RT, @ONLYRPE:, #...|           followan?|

我只需要列字,我将我的表格转换为 temView。

 df.createOrReplaceTempView("Twitter_test_2")

借助 spark sql 应该很容易掌握热门话题,我只需要在 sql 中使用 where 条件运算符“Like”进行查询。这样的词 ”#%”

 spark.sql("select words, 
                   count(words) as count 
            from words_Twitter 
            where words like '#%'  
            group by words 
            order by count desc limit 10").show(20,False) 

但我得到了一些奇怪的结果,我找不到它们的解释。

+---------------------+---+
|words                |cnt|
+---------------------+---+
|#izmirescort         |211|
|#PRODUCE101          |101|
|#VeranoMTV2017       |91 |
|#سلمان_يدق_خشم_العايل|89 |
|#ALDUBHomeAgain      |67 |
|#BTS                 |32 |
|#سود_الله_وجهك_ياتميم|32 |
|#NowPlaying          |32 |

出于某种原因,#89 和 #32 the twoo thar 有阿拉伯字符不在他们应该在的地方。文本已与柜台交换。

其他时候我会遇到这种格式。

 spark.sql("select words, lang,count(words) count from Twitter_test_2 group by words,lang order by count desc limit 10  ").show()

在对我的数据框进行查询之后,它看起来很奇怪

   +--------------------+----+-----+
   |               words|lang|count|
   +--------------------+----+-----+
   |      #VeranoMTV2017|  pl|    6|
   |              #umRei|  pt|    2|
   |             #Virgem|  pt|    2|
   |               #rt
   2|  pl|    2|
   |        #rt
   gazowaną|  pl|    1|
   |             #Ziobro|  pl|    1|
   |         #SomosPorto|  pt|    1|
   +--------------------+----+-----+

为什么会发生这种情况,如何避免呢?

标签: apache-sparkpysparkapache-spark-sql

解决方案


推荐阅读