2017-07-31 10 views
0

ランダムに塗りつぶされたテーブルを作成して保存したかったintこれまでのところすべてがうまくいっていましたが、多次元配列tmpをどのようにしてDataframeのスキーマを上に定義して取得できるのか分かりません。Scala - 配列データをテーブルまたはデータフレームに変換しますか?

import org.apache.spark.sql.types.{ 
StructType, StructField, StringType, IntegerType, DoubleType} 
import org.apache.spark.sql.Row 

val schema = StructType(
StructField("rowId", IntegerType, true) :: 
StructField("t0_1", DoubleType, true) :: 
StructField("t0_2", DoubleType, true) ::  
StructField("t0_3", DoubleType, true) :: 
StructField("t0_4", DoubleType, true) :: 
StructField("t0_5", DoubleType, true) :: 
StructField("t0_6", DoubleType, true) :: 
StructField("t0_7", DoubleType, true) :: 
StructField("t0_8", DoubleType, true) :: 
StructField("t0_9", DoubleType, true) :: 
StructField("t0_10", DoubleType, true) :: Nil) 

val columnNo = 10; 
val rowNo = 50; 

var c = 0; 
var r = 0; 

val tmp = Array.ofDim[Double](10,rowNo) 

for (r <- 1 to rowNo){ 
for (c <- 1 to columnNo){ 
    val temp = new scala.util.Random 
    tmp(c-1)(r-1) = temp.nextDouble 
    println("Value of " + c + "/"+ r + ":" + tmp(c-1)(r-1)); 
} 
} 

val df = sc.parallelize(tmp).toDF 
df.show 
dataframe.show 

答えて

1

配列の配列をDataFrameに変換することはできません。タプルやケースクラスの配列が必要です。ここでは、必要なスキーマに対応するケースクラスに基づくバリアントが表示されます。

case class Record(
    rowID:Option[Int], 
    t0_1:Option[Double], 
    t0_2:Option[Double], 
    t0_3:Option[Double], 
    t0_4:Option[Double], 
    t0_5:Option[Double], 
    t0_6:Option[Double], 
    t0_7:Option[Double], 
    t0_8:Option[Double], 
    t0_9:Option[Double], 
    t0_10:Option[Double] 
) 

val rowNo = 50; 
val temp = new scala.util.Random 

val data = (1 to rowNo).map(r => 
Record(
    Some(r), 
    Some(temp.nextDouble), 
    Some(temp.nextDouble), 
    Some(temp.nextDouble), 
    Some(temp.nextDouble), 
    Some(temp.nextDouble), 
    Some(temp.nextDouble), 
    Some(temp.nextDouble), 
    Some(temp.nextDouble), 
    Some(temp.nextDouble), 
    Some(temp.nextDouble) 
) 
) 

val df = sc.parallelize(data).toDF 
+0

ありがとうございました!私の問題を解決し、コードを大幅に短縮しました! –

関連する問題