объединить столбцы данных scala в одном классе

Вот мой вклад, чтобы получить разницу в месяцах, которые, как я считаю, точны:

namespace System
{
     public static class DateTimeExtensions
     {
         public static Int32 DiffMonths( this DateTime start, DateTime end )
         {
             Int32 months = 0;
             DateTime tmp = start;

             while ( tmp < end )
             {
                 months++;
                 tmp = tmp.AddMonths( 1 );
             }

             return months;
        }
    }
}

Использование:

Int32 months = DateTime.Now.DiffMonths( DateTime.Now.AddYears( 5 ) );

Вы можете создать другой метод под названием DiffYears и применять точно такую ​​же логику, как указано выше, и AddYears вместо AddMonths в цикле while.

-2
задан Seth Tisue 28 February 2019 в 23:11
поделиться

1 ответ

Делает ли это то, что вы хотите?

scala> case class itemData (iid: Int, color: String)
defined class itemData

scala> case class userRecs (uid: Int, recommendations: Array[itemData])
defined class userRecs

scala> val df = spark.createDataset(Seq(
    (41344966,1305,"red"),
    (41344966,1305,"green"),
    (41344966,2174,"red"),
    (41345063,2174,"green"),
    (41346177,2996,"orange"),
    (41349171,2174,"purple")
)).toDF("uid", "iid", "color")
df: org.apache.spark.sql.DataFrame = [uid: int, iid: int ... 1 more field]

scala> (df.select($"uid", struct($"iid",$"color").as("itemData"))
        .groupBy("uid")
        .agg(collect_list("itemData").as("recommendations"))
        .as[userRecs]
        .show())
+--------+--------------------+
|     uid|     recommendations|
+--------+--------------------+
|41344966|[[1305, red], [13...|
|41345063|     [[2174, green]]|
|41346177|    [[2996, orange]]|
|41349171|    [[2174, purple]]|
+--------+--------------------+
0
ответ дан Travis Hegner 28 February 2019 в 23:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: