Генерировать случайный объект в Scala

#scala #apache-spark

#scala #apache-spark

Вопрос:

Я новичок в scala, я попытался создать событие продажи фруктов в Scala и сохранить результат в файле json. Для этого я попытался сгенерировать случайный объект (фрукты с именем и происхождением), но у меня возникли трудности, и я не вижу, как это сделать с помощью случайного класса.

Вот мой код :

 import scala.util.Random
import org.apache.spark.sql.SparkSession


val spark = SparkSession
.builder
.appName("FruitSales")
.getOrCreate()


object FruitSales extends Enumeration {

object Fruit extends Enumeration {
   type Fruit= Value
   val apple, banana , orange, strawberry  = Value
}

object Origin extends Enumeration {
   type Origin = Value
   val USA, espagne, france, sweden, mexico= Value
}

class Fruits(Fruit: String, Origin: String) extends Enumeration {}

def producing_events (fruit: Fruits): Fruits = {
   val rand = new scala.util.Random
   rand.nextString(200)
}

val df = spark.read.json("/tmp/file.json")

df.show(false)

}
  

Комментарии:

1. Проверка Scala станет вашим хорошим другом, оформите заказ по этой ссылке: github.com/typelevel/scalacheck/blob/master/doc/UserGuide.md

Ответ №1:

Я бы посоветовал избегать перечисления в этом случае, это не лучшая практика. Вот мой подход, не идеальный, но даст вам общую идею. Приведенный ниже код генерирует 10 случайных объектов, если вы действительно хотите, вы даже можете настроить распределение вероятностей в ScalaCheck, но я бы предположил, что в вашем случае это слишком много.

   import org.scalacheck._

    final case class Fruit(name: String, origin: String)
    val originGen = Gen.oneOf( List("apple", "banana", "orange", "strawberry") )
    val fruitNameGen = Gen.oneOf( List("USA", "Espagne", "France", "Sweden", "Mexico") )

    val fruits = {
      for {
        _ <- 0 to 10
        origin <- originGen.sample.take(1)
        fruit <- fruitNameGen.sample.take(1)
      } yield Fruit(fruit, origin)
    }

    println( fruits )
  

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

https://github.com/typelevel/scalacheck/blob/master/doc/UserGuide.md

Комментарии:

1. Большое спасибо за вашу помощь, я не знал ScalaCheck, я понимаю общую идею.

2. Scalacheck не работает с Spark, у вас есть другая идея без Scalacheck?

3. ScalaCheck работает с spark так же, как и со всем остальным