Scala。
火花。
intellij的想法。
我有一个来自CSV文件的数据帧(多行,多列)。
我想要它映射到另一个特定的列信息。
我认为scala类(不是case类,因为列数大于22)或map().....
但我不知道如何转换它们。
示例
来自CSV文件的数据帧。
----------------------
| No | price| name |
----------------------
| 1 | 100 | "A" |
----------------------
| 2 | 200 | "B" |
----------------------另一个特定的栏目信息。
=> {product_id, product_name, seller}首先,product_id映射到“No”。其次,product_name映射到'name‘。第三,seller为null或“”(空字符串)。
所以,最后,我需要一个数据帧,它有另一个列info。
-----------------------------------------
| product_id | product_name | seller |
-----------------------------------------
| 1 | "A" | |
-----------------------------------------
| 2 | "B" | |
-----------------------------------------发布于 2016-07-15 18:42:30
如果您已经有一个数据帧(例如,old_df):
val new_df=old_df.withColumnRenamed("No","product_id").
withColumnRenamed("name","product_name").
drop("price").
withColumn("seller", ... )发布于 2016-07-15 18:48:23
假设您的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")加载数据后,您将拥有dataframe df中的所有列名。正如您所提到的,您的列名将是"No“、"Price”、" name“。
要更改列的名称,只需使用dataframe的withColumnRenamed接口。
val renamedDf = df.withColumnRenamed("No","product_id").
withColumnRenames("name","product_name")您的renamedDf将具有您所分配的列的名称。
https://stackoverflow.com/questions/38393942
复制相似问题