scala
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions.{col, monotonically_increasing_id}
val spark = SparkSession.builder().appName("SimulateLogins").getOrCreate()
val loginSchema = spark.createDataFrame(sc.emptyRDD[Row],
StructType(Seq(
StructField("id", IntegerType),
StructField("room_num", IntegerType),
StructField("timestamp", TimestampType))))
val ids = spark.range(1, 101)
val roomNums = ids.withColumn("room_num", (rand(seed=42) * 100).cast("int"))
val timestamps = ids.withColumn("timestamp", monotonically_increasing_id())
val logins = roomNums.join(timestamps, "id")
logins.show()
- 定义一个loginSchema作为输出数据的Schema
- 使用range生成1到100的id
- 使用rand函数生成1到100之间的随机room_num
- 使用monotonically_increasing_id生成连续增长的timestamp
- 使用join将id、room_num和timestamp列连接在一起
- 最后使用show打印输出结果
所以这个程序可以生成包含id、room_num和timestamp三列的模拟登陆数据。timestamp的值是连续增长的,用于模拟用户的登陆时间。