Имя столбца датафрейма не обновляется с использованием псевдонима - PullRequest
0 голосов
/ 10 мая 2018

Я делаю некую агрегацию на созданном мною кадре данных. Вот шаги

val initDF = spark.read.format("csv").schema(someSchema).option("header","true").load(filePath).as[someCaseClass]

var maleFemaleDistribution = initDF.select("DISTRICT","GENDER","ENROLMENT_ACCEPTED","ENROLMENT_REJECTED").groupBy("DISTRICT").agg(
     count( lit(1).alias("OVERALL_COUNT")),
     sum(when(col("GENDER") === "M", 1).otherwise(0).alias("MALE_COUNT")),
     sum(when(col("GENDER") === "F", 1).otherwise(0).alias("FEMALE_COUNT"))
      ).orderBy("DISTRICT")

Как бы то ни было, когда я выполняю printSchema на только что созданном DataFrame, я не вижу имен столбцов в качестве предоставленного мной псевдонима, вместо этого отображается

maleFemaleDistribution.printSchema
root
 |-- DISTRICT: string (nullable = true)
 |-- count(1 AS `OVERALL_COUNT`): long (nullable = false)
 |-- sum(CASE WHEN (GENDER = M) THEN 1 ELSE 0 END AS `MALE_COUNT`): long (nullable = true)
 |-- sum(CASE WHEN (GENDER = F) THEN 1 ELSE 0 END AS `FEMALE_COUNT`): long (nullable = true)

Где, как я ожидаю, имена столбцов будут

maleFemaleDistribution.printSchema
root
 |-- DISTRICT: string (nullable = true)
 |-- OVERALL_COUNT: long (nullable = false)
 |-- MALE_COUNT: long (nullable = true)
 |-- FEMALE_COUNT: long (nullable = true) 

Мне нужна помощь, чтобы понять, почему Alias ​​не обновляется в новом DF. И как я должен изменить код, чтобы отразить имена столбцов, упомянутые в Alias ​​

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Вы должны добавить псевдоним после операции суммирования. Итак, вместо этого

sum(when(col("GENDER") === "M", 1).otherwise(0).alias("MALE_COUNT"))

Это должно выглядеть так:

sum(when(col("GENDER") === "M", 1).otherwise(0)).alias("MALE_COUNT")
0 голосов
/ 10 мая 2018

Я не пытался выполнить запрос, однако так и должно быть.

var maleFemaleDistribution = initDF.select("DISTRICT","GENDER","ENROLMENT_ACCEPTED","ENROLMENT_REJECTED").groupBy("DISTRICT").agg(
     count(lit(1)).alias("OVERALL_COUNT"),
     sum(when(col("GENDER") === "M", 1).otherwise(0)).alias("MALE_COUNT"),
     sum(when(col("GENDER") === "F", 1).otherwise(0)).alias("FEMALE_COUNT")
      ).orderBy("DISTRICT")
...