繁体   English   中英

在Spark和Scala中,如何将数据框转换或映射到特定的列信息?

[英]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映射到“名称”。 第三, sellernull或“”(空字符串)。

所以,最后,我想要一个具有其他列信息的数据框。

-----------------------------------------
| 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM