2015-10-02 23 views

cevap

32

Biz genellikle aşağıdaki örnekte olduğu gibi manipüle edilmesi gerekiyorsa hangi json dosyalarını okumak

scala> import org.apache.spark.sql.functions.explode 
import org.apache.spark.sql.functions.explode 


scala> val test = sqlContext.read.json(sc.parallelize(Seq("""{"a":1,"b":[2,3]}"""))) 
test: org.apache.spark.sql.DataFrame = [a: bigint, b: array<bigint>] 

scala> test.printSchema 
root 
|-- a: long (nullable = true) 
|-- b: array (nullable = true) 
| |-- element: long (containsNull = true) 

scala> val flattened = test.withColumn("b", explode($"b")) 
flattened: org.apache.spark.sql.DataFrame = [a: bigint, b: bigint] 

scala> flattened.printSchema 
root 
|-- a: long (nullable = true) 
|-- b: long (nullable = true) 

scala> flattened.show 
+---+---+ 
| a| b| 
+---+---+ 
| 1| 2| 
| 1| 3| 
+---+---+ 
: Sen explode işlevini kullanabilirsiniz
+0

teşekkürler, bu kabukta harika çalışıyor. Ancak, bunu Intellij'de denediğimde, b "$" ile b sütununa başvurmaya çalışırken bir hata alıyorum. bunun nasıl çözülebileceğini biliyor musun? –

+3

['import sqlContext.implicits._'] 'ı deneyin (https://github.com/apache/spark/blob/8ecba3e86e53834413da8b4299f5791545cae12e/sql/core/src/main/scala/org/apache/spark/sql/SQLContext.scala # L349). Ayrıca 'org.apache.spark.sql.functions.col' kullanabilir ve 'DataFrame (df ("b",))' üzerinde uygulayabilirsiniz. – zero323