2017-04-25 10 views
0

"PointFeature"オブジェクトを使用するspark用サードパーティパッケージを使用しています。私はcsvファイルを取得し、要素を各行をこれらのPointFeatureオブジェクトの配列に配置しようとしています。オブジェクトの配列へのCSV

私の実装のためのPointFeatureコンストラクタは次のようになります。_c1、_c2、および_c3は私のCSVの列であり、ダブルスを表す

Feature(Point(_c1, _c2), _c3) 

。ここで

私の現在の試みです:

val points: Array[PointFeature[Double]] = for{ 
    line <- sc.textFile("file.csv") 
    point <- Feature(Point(line._c1,line._c2),line._c3) 
} yield point 

は私のエラーが列

<console>:36: error: value _c1 is not a member of String 
    point <- Feature(Point(line._c1,line._c2),line._c3.toDouble) 
          ^
<console>:36: error: value _c2 is not a member of String 
     point <- Feature(Point(line._c1,line._c2),line._c3.toDouble) 
              ^
<console>:36: error: value _c3 is not a member of String 
     point <- Feature(Point(line._c1,line._c2),line._c3.toDouble) 
                ^

を参照するとき、それはAの要素であるかのように私は、文字列を参照していますので、これは明らかで現れますDataFrame。私は、このループ形式でDataFramesを操作する方法があるのか​​、または各行をdoubleのListに分割する方法があるのだろうかと思います。多分私はRDDが必要でしょうか?

また、これは配列を生成するとは確信していません。実は、私はここで

アマゾンEMRにスパーク2.1.0を使用しています

...それはRDDを返します疑う私から引き出されている他のいくつかの質問です:

How to read csv file into an Array of arrays in scala

Splitting strings in Apache Spark using Scalaあなたはを設定することができ

How to iterate records spark scala?

答えて

0

10この方法:あなたが合うよう

case class Feature(x: Double, y: Double, z: Double) 
sparkSession.read.csv("file.csv") 
    .toDF("x", "y", "z") 
    .withColumn("x", 'x.cast(DoubleType)) 
    .withColumn("y", 'y.cast(DoubleType)) 
    .withColumn("z", 'z.cast(DoubleType)) 
    .as[Feature] 

その後、あなたは強く型付けされたDataSet[Feature]を消費することができます。

0

これをもっと小さな手順で実行することをおすすめします。

ステップ1

配列/リストの文字列の/何としてあなたの行を取得します。

val lines = sc.textFile("file.txt").getLinesなどです。

ステップ2

列の独自のリストへのあなたのラインをブレイク

val splits = lines.map {l => l.split(",")}

ステップ3

あなたはこれは、すべて一度に行うことができます

val res = splits.map { 
    case Array(col1, col2, col3) => // Convert to doubles, put in to Feature/Point Structure} 
    case _ => // Handle the case where your csv is malformatted 
} 

を使用することができますヴァルスとしてあなたcolumsを抽出し、私は唯一の論理を表示するためにそれらを分割しますファイル→リスト文字列→リストリスト文字列→リスト機能

関連する問題