从表中导出许多文件

zqdjd7g9  于 2021-05-16  发布在  Spark
关注(0)|答案(1)|浏览(497)

我有一个sql查询,它生成一个具有以下格式的表

|sex  |country|popularity|
|null |null   | x        | 
|null |value  | x        |
|value|null   | x        |
|value|null   | x        |
|null |value  | x        |
|value|value  | x        |

性专栏的价值可以是女人,男人
这个国家的价值可以是意大利、英国、美国等。
x是一个整数
现在我想根据数据组合(value,null)保存四个文件。所以file1包含(value,value)列sex,country。file2包含(value,null)列sex,country。文件3由(null,value)组成,文件4由(null,null)组成。
我搜索了很多东西,但找不到任何有用的信息。我也试过下面的方法

val df1 = data.withColumn("combination",concat(col("sex") ,lit(","), col("country")))
df1.coalesce(1).write.partitionBy("combination").format("csv").option("header", "true").mode("overwrite").save("text.csv")

但是我收到更多的文件,因为这个命令根据(性别国家)的所有可能数据生成文件。下同

val df1 = data.withColumn("combination",concat(col("sex")))
    df1.coalesce(1).write.partitionBy("combination").format("csv").option("header", "true").mode("overwrite").save("text.csv")

有没有类似于partitionby的命令可以为我提供对(value,null)的组合而不是列的组合?

z8dt9xmd

z8dt9xmd1#

您可以将这些列转换为布尔值,具体取决于它们是否为null,并将concat转换为一个字符串,看起来像“true\u true”、“true\u false”等。

df = df.withColumn("coltype", concat(col("sex").isNull(), lit("_"), col("country").isNull()))
df.coalesce(1)
  .write
  .partitionBy("coltype")
  .format("csv")
  .option("header", "true")
  .mode("overwrite")
  .save("output")

相关问题