1

私はこのようなcsvファイルを持っています

A B C
1 2 
2 4
3 2 5
1 2 3
4 5 6

このデータをスパークに読み込むと、最初の数行に「空白」があるため、列 C が「文字列」と見なされます。

列 c が整数 (または浮動小数点数) のままになるように、このファイルを SQL データフレームにロードする方法を教えてください。

" " を使用しsc.textFileてデータを Spark に読み込み、それを SQL データフレームに変換しています。

これこのリンクを読みました。しかし、彼らは私をあまり助けませんでした。

私のコード部分。コードの最後の行で、エラーが発生しています。

myFile=sc.textFile(myData.csv)

header = myFile.first()
fields = [StructField(field_name, StringType(), True) for field_name in header.split(',')]
fields[0].dataType = FloatType()
fields[1].dataType = FloatType()
fields[2].dataType = FloatType()

schema = StructType(fields)

myFileCh = myFile.map(lambda k: k.split(",")).map(lambda p: (float(p[0]),float(p[1]),float(p[2])))

ありがとう!

4

1 に答える 1

1

したがって、問題はこの安全でないキャストにあります。「安全な」キャストを実行し、 fload へのキャストが失敗した場合にデフォルト値を返す短い関数を実装できます。

def safe_cast(val, to_type, default=None):
try:
    return to_type(val)
except ValueError:
    return default

safe_cast('tst', float) # will return None
safe_cast('tst', float, 0.0) # will return 0.0

myFileCh = myFile.map(lambda k: k.split(",")).map(lambda p: (safe_cast(p[0], float),safe_cast(p[1], float),safe_cast(p[2], float)))
于 2016-05-24T12:14:35.950 に答える