#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
""")