Spark:加载具有不同模式的csv文件

gr8qqesn  于 2022-12-13  发布在  Apache
关注(0)|答案(1)|浏览(133)

我有一个csv文件,如下所示:

product price,product origin,phone number
20,US,200200

我想使用新模式加载csv文件,这样我的数据集看起来就像这样:

|price | origin | number |
|20    | US     | 200200 |

我尝试使用structfield创建模式:

sparkSession.read().format("csv")
                .option("header", "false")
                .option("delimiter", ",")
                .schema(myScheme).load(csv)

但我得到是这样的:

|price     | origin | number |
|200200    | US     | 20     |

用正确列顺序的新方案加载csv的正确方法是什么?

jw5wzhpr

jw5wzhpr1#

使用包含您在问题中发布的确切内容的csv文件:

product price,product origin,phone number
20,US,200200

您应该能够使用org.apache.spark.sql.types._中的类型创建架构。您可以执行以下操作:

import org.apache.spark.sql.types._
val mySchema = new StructType()
  .add("product price", IntegerType)
  .add("product origin", StringType)
  .add("phone number", StringType)

val df = spark
  .read
  .option("header", "true")
  .schema(mySchema)
  .csv("./simpleCSV.csv")

df.show
+-------------+--------------+------------+                                                                                                                                                                                                                                     
|product price|product origin|phone number|                                                                                                                                                                                                                                     
+-------------+--------------+------------+                                                                                                                                                                                                                                     
|           20|            US|      200200|                                                                                                                                                                                                                                     
+-------------+--------------+------------+

df.printSchema                                                                                                                                                                                                                                                           
root                                                                                                                                                                                                                                                                            
 |-- product price: integer (nullable = true)                                                                                                                                                                                                                                   
 |-- product origin: string (nullable = true)                                                                                                                                                                                                                                   
 |-- phone number: string (nullable = true)

希望这对你有帮助!

相关问题