我有以下数据,我希望以稍后可以查询的方式拆分流派值。作为第一步,我知道如何分割列,但问题是当我应用分割时我只得到一个类型值而不是所有类型列
id,genre,rating
1,"lorem_1, lorem_2, lorem_3",5
1,"lorem_1, lorem_2, lorem_3, lorem_4, lorem_5",5
1,"lorem_1, lorem_2, lorem_3, lorem_4",5
1,"lorem_1, lorem_2, lorem_3, lorem_4, lorem_5",5
...
首选结果
id,genre,rating
1,[lorem_1, lorem_2, lorem_3],5
1,[lorem_1, lorem_2, lorem_3, lorem_4, lorem_5],5
...
或任何其他易于查询的结果
答案 0 :(得分:1)
假设数据类型为 'id,genre,rating'是List [(Int,String,Int)]
$ node
> let f = (x)=>{x+1}
undefined
> f(3)
undefined
> let f = (x)=>{return x+1}
undefined
> f(3)
4
以上可以通过以下方式转换为所需的方式
(val, i) => {return {i:val}}
答案 1 :(得分:1)
最简单的方法是使用DataFrame API的split
函数:
val df2 = df.withColumn("genre", split($"genre", ", "))
由于您有一个csv文件,因此可以将数据读取为数据帧:
val spark = SparkSession.builder.getOrCreate()
val df = spark.read
.format("csv")
.option("header", "true") //reading the headers
.load("/path/to/csv")
加载后,可以按上述方法拆分genre
列。
如果您想在之后保存为csv文件,则可以使用以下命令:
df.write.format("csv").save("/path/to/save/csv")
Spark 2.x 约定用于加载和保存到csv。较旧的版本依赖于spark-csv
包,但它包含在较新版本的Spark中。
答案 2 :(得分:1)
我猜你有一个文本文件,其中包含问题中提供的信息。我可以建议您采用以下两种方式:1)使用dataframe
和split
以及2)使用rdd
和split
。
1)dataframe
方式
import org.apache.spark.sql.functions._
val df = sqlContext
.read
.format("com.databricks.spark.csv")
.option("header", true)
.csv("path to your csv file")
.withColumn("genre", split($"genre", ","))
您应该有以下输出
+---+-------------------------------------------------+------+
|id |genre |rating|
+---+-------------------------------------------------+------+
|1 |[lorem_1, lorem_2, lorem_3] |5 |
|1 |[lorem_1, lorem_2, lorem_3, lorem_4, lorem_5]|5 |
|1 |[lorem_1, lorem_2, lorem_3, lorem_4] |5 |
|1 |[lorem_1, lorem_2, lorem_3, lorem_4, lorem_5]|5 |
+---+-------------------------------------------------+------+
2)rdd
方式
val rdd = sc
.textFile("path to your csv file")
.map(x => x.split(",(?=([^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)"))
.map(x => (x(0), x(1).split(","), x(2)))
你应该有以下输出
(id,[genre],rating)
(1,[lorem_1, lorem_2, lorem_3],5)
(1,[lorem_1, lorem_2, lorem_3, lorem_4, lorem_5],5)
(1,[lorem_1, lorem_2, lorem_3, lorem_4],5)
(1,[lorem_1, lorem_2, lorem_3, lorem_4, lorem_5],5)
我希望答案很有帮助