Как я могу назвать сводный столбец в spark scala sql вместо заданного по умолчанию?

#sql #scala #apache-spark #apache-spark-sql

#sql #scala #apache-spark #apache-spark-sql

Вопрос:

В моем домашнем задании я должен создать куб из двух таблиц. С использованием scala все становится хорошо, ожидайте от той части, где я создаю агрегацию, используя следующий запрос :

 
val borrowersAggregation = spark.sql("""SELECT borrowersTable.gender,borrowersTable.department,COUNT(loansTable.bid) FROM borrowersTable,loansTable WHERE borrowersTable.bid = loansTable.bid GROUP BY borrowersTable.gender,borrowersTable.department WITH CUBE""")
    borrowersAggregation.show();
    
    borrowersAggregation.createOrReplaceTempView("cube")

 

Новый столбец называется count(bid), но я хочу другое имя. Могу ли я как-то переименовать его внутри тела запроса или мне следует записать дополнительную строку кода?
Спасибо!

Ответ №1:

вы можете создать псевдоним столбца, используя as <new_column_name>

 val borrowersAggregation = spark.sql("""SELECT borrowersTable.gender,borrowersTable.department,COUNT(loansTable.bid) as <new_column_name> FROM borrowersTable,loansTable WHERE borrowersTable.bid = loansTable.bid GROUP BY borrowersTable.gender,borrowersTable.department WITH CUBE""")
 

в качестве альтернативы с помощью dataframe функций, использующих .withColumn() или .withColumnRenamed()

 val borrowersAggregation = spark.sql("""SELECT borrowersTable.gender,borrowersTable.department,COUNT(loansTable.bid)  FROM borrowersTable,loansTable WHERE borrowersTable.bid = loansTable.bid GROUP BY borrowersTable.gender,borrowersTable.department WITH CUBE""").withColumnRenamed("count(*)","<new_column_name>")

//or using withColumn function
val borrowersAggregation = spark.sql("""SELECT borrowersTable.gender,borrowersTable.department,COUNT(loansTable.bid)  FROM borrowersTable,loansTable WHERE borrowersTable.bid = loansTable.bid GROUP BY borrowersTable.gender,borrowersTable.department WITH CUBE""").withColumn("<new_column_name>","count(*)").drop("count(*)")
 

Ответ №2:

Вы можете указать псевдонимы столбцов, используя AS

 spark.sql("""
SELECT
    borrowersTable.gender,
    borrowersTable.department,
    COUNT(loansTable.bid) AS count_bid
FROM borrowersTable,loansTable
WHERE borrowersTable.bid = loansTable.bid
GROUP BY borrowersTable.gender,borrowersTable.department WITH CUBE
""")