2017-01-02 16 views
0

double型を含むcsvファイルがあります。データフレームにロードすると、この文字列がjava.lang.Stringであることを示すこのメッセージがjava.lang.Doubleにキャストできません私のデータはnumeric.Howどのように私は私のコードを変更する必要がありますダブルtype.howを含むこのCSVファイルからデータフレームを取得しますか?データフレーム内の文字列データをdoubleに変換します

import org.apache.spark.sql._ 
import org.apache.spark.sql.functions._ 
import org.apache.spark.sql.SparkSession 
import org.apache.spark.sql.types.{ArrayType, DoubleType} 
import org.apache.spark.sql.functions.split 
import scala.collection.mutable._ 

object Example extends App { 

val spark = SparkSession.builder.master("local").appName("my-spark-app").getOrCreate() 
val data=spark.read.csv("C://lpsa.data").toDF("col1","col2","col3","col4","col5","col6","col7","col8","col9") 
val data2=data.select("col2","col3","col4","col5","col6","col7") 

データフレームの各行をダブルタイプに変換するにはどうすればよいですか?おかげ

答えて

5

使用selectcastと:

data.select(Seq("col2", "col3", "col4", "col5", "col6", "col7").map(
    c => col(c).cast("double") 
): _*) 

やリーダーにスキーマを渡す:

  • スキーマを定義します。

    import org.apache.spark.sql.types._ 
    
    val cols = Seq(
        "col1", "col2", "col3", "col4", "col5", "col6", "col7", "col8", "col9" 
    ) 
    
    val doubleCols = Set("col2", "col3", "col4", "col5", "col6", "col7") 
    
    val schema = StructType(cols.map(
        c => StructField(c, if (doubleCols contains c) DoubleType else StringType) 
    )) 
    
  • との引数としてそれを使用しますschema方法

    spark.read.schema(schema).csv(path) 
    

スキーマ推論使用することも可能である:

spark.read.option("inferSchema", "true").csv(path) 

を、それははるかに高価です。

0

私はスパークを使用すると考えていますinferSchemaオプションは、csvファイルを読む際に便利です。以下は、列を自動的にダブルタイプとして検出するコードです:

val data = spark.read 
       .format("csv") 
       .option("header", "false") 
       .option("inferSchema", "true") 
       .load("C://lpsa.data").toDF() 


Note: I am using spark version 2.2.0 
関連する問題