スパークカラムスイッチを達成

A.コードの実装 

1つの パッケージbig.data.analyse.tokenizer
 2  
3  インポートcom.hankcs.hanlp.HanLP
 4  インポートcom.hankcs.hanlp.tokenizer.StandardTokenizer
 5  インポートorg.apache.log4j。{レベル、ロガー}
 6  インポートorg.apache.spark .SQL。{SQLContext、行}
 7  インポートorg.apache.spark.sql.catalyst.expressions.StringToMap
 8  インポートorg.apache.spark.sql.types。{IntegerType、StringType、StructType、StructField}
 9  インポートorg.apache。スパーク。{SparkContext、SparkConf}
 10  
11  / ** 
12    使用Hanlp分词器中*スパーク
 13   * 2019年5月30日にジェンによって作成されます。
14    * / 
15  オブジェクトHanlpTokenizer {
 16    / ** 
17      *设置日志级别
 18      * / 
19    Logger.getLogger( "ORG" ).setLevel(Level.WARN)
 20    DEFメイン(引数:配列[文字列]){
 21      ヴァル・CONF = 新しいSparkConf()
 22        .setAppName( "HanlpTokenizer" 23        .setMaster( "ローカル[2]" 24  
25      ヴァルのSC = 新しいSparkContext(CONF)
 26  
27      ヴァルsqlContext = 新しいsQLContext(SC)
 28     ヴァル配列:配列[文字列] =配列(「火花点火バージョン2.4リリース、大きなパフォーマンスの向上、スパークエコシステムはますます向上」29        「火花sparkML機械学習は、スパーク停止のための生態系スパークの重要な部分であります強力な活力「へと発展し30        スパークの急速な発展とともに、Hadoopのは、特に、機械学習や計算の面で、スピードを提供することができ、あまり大きなギャップ」 - 「機械学習31        」solr-検索エンジンや古いです無傷で、継続的な開発solrcloudで、データの量には特に大きくない状況、まだ「多くの自然の利点があり32は        SolrのSolrの-ES」は技術の最も深刻な影響である」33  
34      ヴァルtermRdd = sc.parallelize(アレイ).MAP(行=> { // 標準ワード、マウントHanlpトークナイザ
35        VAR結果= ""
 36        ヴァルtype_content = row.split( " - " 37 [       ヴァルtermList = StandardTokenizer.segment(type_content(1 ))
 38        のための式(I < - 0 までtermList.size()){
 39          ヴァル用語= termList.get(I)
 40          // 場合(term.nature.name.contains! ( "W")&&!term.nature.name()。( "U")は&& term.nature.name()。( "M")を含んでいる){含ま
41            なら 1(term.word.length> ){
 42              結果+ = term.word + ""
 43            }
 44          // } 
45        }
 46        行(type_content(0 )、
結果) 47      })
 48  
49     ヴァルstructType =StructType(アレイ(
 50       StructField( "arth_type"、StringType、)、
 51      StructField( "コンテンツ"、StringType、52     ))
 53  
54      ヴァルtermDF = sqlContext.createDataFrame(termRdd、structType)
 55  
56      / ** 
57        *列转行
 58        * / 
59      ヴァルtermCheckDF = termDF.rdd.flatMap(行=> {
 60        ヴァルarth_type = row.getAs [文字列]( "arth_type" 61        ヴァル含量= row.getAs [文字列]( "コンテンツ" 62        VaRのRES =配列[行]()
 63       ヴァルcontent_array = content.split(」 " 64        のための(CON < - content_array){
 65          のRES =のRES:+行(arth_type、CON、1 66        }
 67        RES
 68      。})(コレクト)
 69  
70      / ** 
71        *重新转成DF
 72        * / 
73      ヴァルstructType2 = StructType(アレイ(
 74        StructField( "arth_type"、StringType、)、
 75        StructField( "コンテンツ"、StringType、)、
 76        StructField( "NUM"、IntegerType、77      ))
 78  
79      ヴァルtermListDF = sqlContext.createDataFrame(sc.parallelize(termCheckDF)、structType2)
 80  
81      / ** 
82        *注册临时视图
 83        * / 
84      termListDF.createOrReplaceTempView( "termListDF" 85  
86      / ** 
87        *分组求和
 88        * / 
89      ヴァル結果= sqlContext.sql( "arth_typeを選択し、コンテンツ、和(NUM)NUM" +
 90        "termListDF群からnum個のDESCによってarth_type、コンテンツORDER BY" 91  
92      result.count()
 93      result.show(594  
95      sc.stop()
 96    }
 97 }

II。結果

  

 

おすすめ

転載: www.cnblogs.com/yszd/p/11266552.html