2016-06-13 3 views
1

용어에 대한 문서 배열을 검색 한 다음 발생 횟수를 계산하고 싶습니다. 다음은 "하나"라는 용어를 사용하는 작업 예제입니다.문서 검색을위한 Spark (Scala) 함수 작성 방법

val temp_rdd = sc.parallelize(Array("one item", "two item", "one two three")) 
val df = temp_rdd.toDF("line") 
val get_ones = df.filter(col("line").like("%one%")) 
get_ones.count() 

// res43: Long = 2 

지금, 나는 인수로 용어를 받아들이는 기능이 점을 설정하고 싶습니다,하지만 난 그게 동작하지 않습니다. 최선의 시도는 여기에 있습니다.

def countTerm(df: RDD[String], str:String): Int = { 
    val terms = df.filter(col("line").like(str)) 
    return terms.count() 
} 
countTerm(df, "%one%") 

내가 알 수없는이 오류가 발생합니다. 제 사과, 스파크와 스칼라가 처음이에요.

<console>:56: error: type mismatch; 
found : org.apache.spark.sql.Column 
required: String => Boolean 
     val terms = df.filter(col("line").like(str)) 
              ^

답변

2

당신은 RDD와 DataFrames 방법을 혼합되어

import org.apache.spark.sql.DataFrame 

def countTerm(df: DataFrame, str:String): Long = { 
    val terms = df.filter($"line".like(str)) 
    terms.count 
} 

val rdd = sc.parallelize(Array("one item", "two item", "one two three")) 
val df = rdd.toDF("line") 

df.filter($"line".like("%one%")).show 
// +-------------+ 
// |   line| 
// +-------------+ 
// |  one item| 
// |one two three| 
// +-------------+ 

countTerm(df,"%one%") 
// res3: Long = 2