2017-04-20 18 views
1

jsonファイルを解析するapache sparkおよび書き込みアプリケーションの新機能です。 jsonファイルの属性の1つは文字列の配列です。配列属性に文字列 "None"が含まれていない場合は、行を選択するクエリを実行します。 org.apache.spark.sql.functionsパッケージでarray_containsメソッドを使用するいくつかのソリューションが見つかりました。しかし、私は自分のアプリケーションを構築しようとしたとき、私は次のことを得るのシンボルエラーを見つけることができません。Apache Spark:シンボルエラーが見つかりませんarray_containsの使用

Cannot find symbol

私はApacheのスパーク2.0、そして私のプロジェクトをビルドするMavenを使用しています。私がコンパイルしようとしていますコード:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>term</groupId> 
    <artifactId>Data</artifactId> 
    <version>0.0.1</version> 

    <!-- specify java version needed??? --> 
    <properties> 
    <maven.compiler.source>1.8</maven.compiler.source> 
    <maven.compiler.target>1.8</maven.compiler.target> 
    </properties> 

    <!-- overriding src/java directory... --> 
    <build> 
    <sourceDirectory>src/</sourceDirectory> 
    </build> 

    <!-- telling it to create a jar --> 
    <packaging>jar</packaging> 


    <!-- DEPENDENCIES --> 
    <dependencies> 
    <dependency> 
     <groupId>org.apache.hadoop</groupId> 
     <artifactId>hadoop-client</artifactId> 
     <version>2.7.3</version> 
    </dependency> 
    <dependency> 
     <groupId>org.scala-lang</groupId> 
     <artifactId>scala-library</artifactId> 
     <version>2.11.7</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.spark</groupId> 
     <artifactId>spark-streaming_2.10</artifactId> 
     <version>2.0.0</version> 
    </dependency> 
    </dependencies> 
</project> 

答えて

3

変更

Dataset<Row> newDF = df.select(col("user_id"),col("elite").where(
     array_contains(col("elite"),"None"))); 

のように、修飾子として functionsクラスを追加するには:以下

import java.util.List; 

import scala.Tuple2; 

import org.apache.spark.SparkConf; 
import org.apache.spark.api.java.JavaPairRDD; 
import org.apache.spark.api.java.JavaRDD; 
import org.apache.spark.api.java.JavaSparkContext; 
import org.apache.spark.sql.Column; 
import org.apache.spark.sql.Dataset; 
import org.apache.spark.sql.Row; 
import org.apache.spark.sql.SQLContext; 
import org.apache.spark.sql.SparkSession; 
import org.apache.spark.sql.functions; 

import static org.apache.spark.sql.functions.col; 
public class temp { 

    public static void main(String[] args) { 
     SparkSession spark = SparkSession 
       .builder() 
       .appName("testSpark") 
       .enableHiveSupport()  
       .getOrCreate(); 

     Dataset<Row> df = spark.read().json("hdfs://XXXXXX.XXX:XXX/project/term/project.json"); 
     df.printSchema(); 
     Dataset<Row> filteredDF = df.select(col("user_id"),col("elite")); 
     df.createOrReplaceTempView("usersTable"); 
     String val[] = {"None"}; 
     Dataset<Row> newDF = df.select(col("user_id"),col("elite").where(array_contains(col("elite"),"None"))); 
     newDF.show(10); 
     JavaRDD<Row> users = filteredDF.toJavaRDD(); 
    } 
} 

は私のpom.xmlファイルであります

Dataset<Row> newDF = df.select(col("user_id"),col("elite").where(
     functions.array_contains(col("elite"),"None"))); 

またはStatic Import

import static org.apache.spark.sql.functions.array_contains; 
+0

を使用するには、私は完全に私が修飾子としての機能クラスを追加するために必要なことを忘れて、ありがとうございます。私はあまりにも多くのスカラーの例を見てきました。 –

関連する問題