以下是您可以做的事情
import org.apache.spark.sql.functions._
val df = spark.sparkContext.parallelize(Seq(
(1, "Fname1", "Lname1", "Belarus"),
(2, "Fname2", "Lname2", "Belgium"),
(3, "Fname3", "Lname3", "Austria"),
(4, "Fname4", "Lname4", "Australia")
)).toDF("id", "fname","lname", "country")
val result = df.withColumn("countryFirst", split($"country", "")(0))
result.write.partitionBy("countryFirst").format("com.databricks.spark.csv").save("outputpath")
修改:
您还可以使用Raphel建议的子字符串来提高性能,如下所示
substring(Column str, int pos, int len)
子字符串从pos开始,长度为len,
当str类型为String时返回字符串类型的子串,当str类型为Binary时返回以byte类型表示的子数组,其起始位置为pos,长度为len。
val result = df.withColumn("firstCountry", substring($"country",1,1))
然后使用 partitionby 写入
希望这能解决你的问题!
substring
函数代替split
,我认为这更易读。 - Raphael Roth