私はpythonでスパークを使用しています.CSVファイルをアップロードした後、22桁の番号を持つCSVファイル内の列を解析する必要がありました。その列を解析するために、LongType()を使用しました。私は、列を定義するためにmap()関数を使用しました。 以下は私のコマンドがpysparkであることです。pysparkの大きな数値を処理するデータ型
>>> test=sc.textFile("test.csv")
>>> header=test.first()
>>> schemaString = header.replace('"','')
>>> testfields = [StructField(field_name, StringType(), True) for field_name in schemaString.split(',')]
>>> testfields[5].dataType = LongType()
>>> testschema = StructType(testfields)
>>> testHeader = test.filter(lambda l: "test_date" in l)
>>> testNoHeader = test.subtract(testHeader)
>>> test_temp = testNoHeader.map(lambda k: k.split(",")).map(lambda
p:(p[0],p[1],p[2],p[3],p[4],***float(p[5].strip('"'))***,p[6],p[7]))
>>> test_temp.top(2)
注:私も変数test_tempで「フロート」の代わりに「長い」と「BIGINT」を試してみましたが、スパークにエラーとなった を「キーワードが見つからない」そして次があります次のように出力
[('2012-03-14', '7', '1698.00', 'XYZ02abc008793060653', 'II93', ***8.27370028700801e+21*** , 'W0W0000000000007', '879870080088815007'), ('2002-03-14', '1', '999.00', 'ABC02E000050086941', 'II93', 8.37670028702205e+21, 'A0B0080000012523', '870870080000012421')]
は私のcsvファイルの値は次のとおりです。 8.27370028700801e + 21はです私はそれのうちデータフレームを作成し、それを照会する場合8.37670028702205e + 21は
>>> test_df = sqlContext.createDataFrame(test_temp, testschema)
>>> test_df.registerTempTable("test")
>>> sqlContext.sql("SELECT test_column FROM test").show()
test_column
です。
だから、スパークに大きな数を解析するこの問題を解決する方法を本当に