私はSpark(2.0)でSpark SQLに取り組んでおり、CSVを読むためにJava APIを使用しています。データセットの文字列を分割する<Row>コンマで新しいデータセットを取得<Row>
CSVファイルには、カンマ区切りの列が二重引用符で囲まれています。例:CSVを読み取り、データセットを返すため"Express Air,Delivery Truck"
コード:
Dataset<Row> df = spark.read()
.format("com.databricks.spark.csv")
.option("inferSchema", "true")
.option("header", "true")
.load(filename)
結果:
+-----+--------------+--------------------------+
|Year | State | Ship Mode |...
+-----+--------------+--------------------------+
|2012 |New York |Express Air,Delivery Truck|...
|2013 |Nevada |Delivery Truck |...
|2013 |North Carolina|Regular Air,Delivery Truck|...
+-----+--------------+--------------------------+
しかし、私はデータセットとしてMode1
からShop Mode
とMode2
柱とリターンを分割したいです。
+-----+--------------+--------------+---------------+
|Year | State | Mode1 | Mode2 |...
+-----+--------------+--------------+---------------+
|2012 |New York |Express Air |Delivery Truck |...
|2013 |Nevada |Delivery Truck|null |...
|2013 |North Carolina|Regular Air |Delivery Truck |...
+-----+--------------+--------------+---------------+
Java Sparkを使用してこれを行う方法はありますか?
私はMapFunctionで試しましたが、call()メソッドはRowを返さなかった。 Ship Mode
は動的です。つまり、CSVには1つまたは2つの船舶モードが含まれます。
ありがとうございました。
df.selectExpr("Year","State","split(Ship Mode, ',')[0] as Mode1","split(Ship Mode, ',')[1] as Mode2");
結果は、行のデータセットである:
カンマ区切りの値の数が不明な場合は、別の方法を提案できますか? col1、col2、....からcol40まで変化する可能性があります。それは40で最大です。 –