Поиск среднего значения на уровне записи между столбцами с помощью spark sql

#mysql #apache-spark-sql

Вопрос:

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

  1. Посмотрите (номера рейтингов) в описании каждого рейтинга и получите значение индекса рейтинга для Fitch, Moody, S_P
  2. Если доступны все рейтинговые индексы, возьмите медиану значения
  3. Если доступно какое-либо значение индекса рейтинга 2, выберите более низкий рейтинг (чем выше индекс, тем ниже значение рейтинга).
  4. Если доступно только значение индекса рейтинга, по умолчанию используется то же самое
  5. Если оценки недоступны, отметьте как «»N/R»»
  6. С помощью значения индекса рейтинга посмотрите на числовой файл рейтинга и сопоставьте описание рейтинга»

Мне удалось создать таблицу, в которой я могу получить оценки, но не могу рассчитать медиану значения. требуется помощь в этом.

запрос, который я написал, это :

 spark.sql("with Fitch AS (select s1.SecurityID, s1.FitchDescription, s2.RtgMapIndx FitchRating from SMFSTAT s1 join RATINGNUM s2 on s1.FitchDescription=s2.RtgMapClean),Moody AS (select s1.SecurityID, s1.MoodyDescription, s2.RtgMapIndx MoodyRating from SMFSTAT s1 join RATINGNUM s2 on s1.MoodyDescription=s2.RtgMapClean),S_P AS (select s1.SecurityID, s1.S_PDescription, s2.RtgMapIndx S_PRating from SMFSTAT s1 join RATINGNUM s2 on s1.S_PDescription=s2.RtgMapClean),lookup AS (select Fitch.SecurityID, FitchDescription, FitchRating, MoodyDescription, MoodyRating, S_PDescription, S_PRating from Fitch left join Moody on Fitch.SecurityID = Moody.SecurityID left join S_P on S_P.SecurityID = Fitch.SecurityID) select lookup.*,case when FitchRating is not null and MoodyRating is not null and S_PRating is not null then 'MedianValue' when MoodyRating is null and S_PRating is not null and FitchRating is not null then LEAST(FitchRating,S_PRating) when MoodyRating is not null and S_PRating is not null and FitchRating is null then LEAST(MoodyRating,S_PRating) when MoodyRating is not null and S_PRating is null and FitchRating is not null then LEAST(FitchRating,MoodyRating) when FitchRating is NULL and MoodyRating is NULL and S_PRating is NULL then 'N/R' When FitchRating is NULL and MoodyRating is NULL and S_PRating is not Null then S_PRating When FitchRating is Null and MoodyRating is not null and S_PRating is null then MoodyRating else FitchRating end as Rating from lookup")
 

нужна помощь в расчете медианы.

  ---------- ---------------- ----------- ---------------- ----------- -------------- --------- ----------- 
|SecurityID|FitchDescription|FitchRating|MoodyDescription|MoodyRating|S_PDescription|S_PRating|     Rating|
 ---------- ---------------- ----------- ---------------- ----------- -------------- --------- ----------- 
| 114259AP9|              A-|          7|            Baa1|                  BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|
| 114259AP9|              A-|          7|            Baa1|          8|          BBB |        8|MedianValue|