[英]In spark and scala, how to convert or map a dataframe to specific columns info?
斯卡拉(Scala)。
火花。
Intellij IDEA。
我有一个来自CSV文件的数据框(多行,多列)。
我希望它映射到另一个特定的列信息。
我认为scala类(不是case类,因为列数> 22)或map()
.....
但是我不知道如何转换它们。
例
CSV文件中的数据框。
----------------------
| No | price| name |
----------------------
| 1 | 100 | "A" |
----------------------
| 2 | 200 | "B" |
----------------------
另一个特定的列信息。
=> {product_id, product_name, seller}
首先, product_id
映射为“否”。 其次, product_name
映射到“名称”。 第三, seller
为null
或“”(空字符串)。
所以,最后,我想要一个具有其他列信息的数据框。
-----------------------------------------
| product_id | product_name | seller |
-----------------------------------------
| 1 | "A" | |
-----------------------------------------
| 2 | "B" | |
-----------------------------------------
如果您已经有一个数据框(例如old_df):
val new_df=old_df.withColumnRenamed("No","product_id").
withColumnRenamed("name","product_name").
drop("price").
withColumn("seller", ... )
假设您的CSV文件是“ products.csv”,
首先,您必须将其加载到spark中,可以使用
import org.apache.spark.sql.SQLContext
val sqlContext = new SQLContext(sc)
val df = sqlContext.read
.format("com.databricks.spark.csv")
.option("header", "true") // Use first line of all files as header
.option("inferSchema", "true") // Automatically infer data types
.load("cars.csv")
加载数据后,您将在数据框df中拥有所有列名。 如前所述,您的列名称将为“否”,“价格”,“名称”。
要更改列的名称,只需使用dataframe的withColumnRenamed api。
val renamedDf = df.withColumnRenamed("No","product_id").
withColumnRenames("name","product_name")
重命名的Df将具有您分配的列的名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.