web-dev-qa-db-ja.com

リストをデータフレームに変換spark scala

30個を超える文字列を含むリストがあります。リストをデータフレームに変換する方法。私が試したこと:

例えば

Val list=List("a","b","v","b").toDS().toDF()

Output :


+-------+
|  value|
+-------+
|a      |
|b      |
|v      |
|b      |
+-------+


Expected Output is 


  +---+---+---+---+
| _1| _2| _3| _4|
+---+---+---+---+
|  a|  b|  v|  a|
+---+---+---+---+

これに関するヘルプ。

6
senthil kumar p

List("a","b","c","d")は1つのフィールドを持つレコードを表すため、結果セットは各行に1つの要素を表示します。

期待される出力を取得するには、行に4つのフィールド/要素が含まれている必要があります。したがって、4つのフィールドを持つ1つの行を表すList(("a","b","c","d"))としてリストをラップします。同様に、2行のリストはList(("a1","b1","c1","d1"),("a2","b2","c2","d2"))になります。

scala> val list = sc.parallelize(List(("a", "b", "c", "d"))).toDF()
list: org.Apache.spark.sql.DataFrame = [_1: string, _2: string, _3: string, _4: string]

scala> list.show
+---+---+---+---+
| _1| _2| _3| _4|
+---+---+---+---+
|  a|  b|  c|  d|
+---+---+---+---+


scala> val list = sc.parallelize(List(("a1","b1","c1","d1"),("a2","b2","c2","d2"))).toDF
list: org.Apache.spark.sql.DataFrame = [_1: string, _2: string, _3: string, _4: string]

scala> list.show
+---+---+---+---+
| _1| _2| _3| _4|
+---+---+---+---+
| a1| b1| c1| d1|
| a2| b2| c2| d2|
+---+---+---+---+
5
SrinR

ToDFを使用するには、インポートする必要があります

import spark.sqlContext.implicits._

以下のコードを参照してください

val spark = SparkSession.
builder.master("local[*]")
  .appName("Simple Application")
.getOrCreate()

import spark.sqlContext.implicits._

val lstData = List(List("vks",30),List("harry",30))
val mapLst = lstData.map{case List(a:String,b:Int) => (a,b)}
val lstToDf = spark.sparkContext.parallelize(mapLst).toDF("name","age")
lstToDf.show

val llist = Seq(("bob", "2015-01-13", 4), ("alice", "2015-04- 23",10)).toDF("name","date","duration")
llist.show
3
Vikas Singh