2017-12-04 20 views
1

RDD[Array[String]]です。私はそれを反復し、隣接する要素を比較したい。これを行うには、RDDからデータセットを作成する必要があります。Sparkで文字列の配列を含むRDDからSQLContextデータセットを作成

import org.apache.spark.sql.SQLContext 

val sqc = new SQLContext(sc) 
val lines = sqc.createDataset(data) 

そして、私は2つの次のエラーを取得:

私はsc、以下を試してみてください、私のSparkContextある

Error:(12, 34) Unable to find encoder for type stored in a Dataset. Primitive types (Int, String, etc) and Product types (case classes) are supported by importing sqlContext.implicits._ Support for serializing other types will be added in future releases. val lines = sqc.createDataset(data)

Error:(12, 34) not enough arguments for method createDataset: (implicit evidence$4: org.apache.spark.sql.Encoder[Array[String]])org.apache.spark.sql.Dataset[Array[String]]. Unspecified value parameter evidence$4. val lines = sqc.createDataset(data)

確かに、私は、しかし、私はエンコーダの引数を渡す必要があります理解してこの場合はどうなりますか、エンコーダーはどのようにインポートしますか?私は自分自身を試してみると、createDatasetはそれを引数として取っていないと言います。

同様の質問がありますが、エンコーダの引数の使い方には答えません。私のRDDがRDD[String]なら、それは完璧に動作しますが、この場合はRDD[Array[String]]です。

+2

'import sqc.implicits._' – philantrovert

+0

私はすでにこれらの質問を読んでいるので、重複しているとは考えていません。 – osk

+0

それをインポートすると、エンコーダはどのように使用できますか? (第2引数に何を渡すのですか?) – osk

答えて

1

問題のコメントのすべてはあなたに

を次のことを伝えようとしているあなたは、私が今dataframerddをされた変換、次の

val rdd = sc.parallelize(Seq(Array("a", "b"), Array("d", "e"), Array("g", "f"), Array("e", "r"))) //rdd: org.apache.spark.rdd.RDD[Array[String]] = ParallelCollectionRDD[0] at parallelize at worksheetTest.sc4592:13 

を行うことによって作成RDD[Array[String]]を、持っていると言います.toDFに電話する前に、importimplicits._sqlContextのように、

val sqc = new SQLContext(sc) 
import sqc.implicits._ 
rdd.toDF().show(false) 

あなたはdataframe

として
+------+ 
|value | 
+------+ 
|[a, b]| 
|[d, e]| 
|[g, f]| 
|[e, r]| 
+------+ 

を持っている必要がありますが、これはすべての単純ではないですか?

関連する問題