在spark scala中生成特定范围内的随机日期

时间:2018-04-06 10:22:12

标签: scala apache-spark parquet

为了测试我的一个应用程序,我需要一些镶木地板格式的大数据。我没有。我已经编写了一个执行缓慢的shell脚本。我想用spark。如何使用spark scala生成随机数据。 每个档案必须在特定范围内.Id应该在(1-10)之间,日期(2010-2018的任何日期),开始和结束时间应该是任何。 我的shell scipt。

!/斌/庆典

if [ $# -eq 2 ]; then
    LIMIT=40  # to generate 40KB file
    for((i=0;i<$2;i++))
    {
        FILE_NAME="$1$i.csv"
        echo "id,date,start_time,end_time,distance,amount,persons,longitude,latitude" >> "$FILE_NAME"
        while [ $(du -k $FILE_NAME | cut -f 1) -le $LIMIT ]
        do
            start_time=`date -d "$(date +%H:%M:%S) + $(shuf -i 0-24 -n 1) hours $(shuf -i 0-60 -n 1) minutes $(shuf -i 0-60 -n 1) seconds" +'%H:%M:%S'`
            echo "`shuf -i 1-10 -n 1`,`date -d "2011-01-01 + $(shuf -i 1-2557 -n 1) days" +'%m-%d-%Y'`,$start_time,`date -d "$start_time + $(shuf -i 1-6 -n 1) hours $(shuf -i 0-60 -n 1) minutes $(shuf -i 0-60 -n 1) seconds" +'%H:%M:%S'`,`shuf -i 1-60 -n 1`,`shuf -i 100-1500 -n 1`,`shuf -i 1-6 -n 1`,`shuf -i 10-99 -n 1`.`shuf -i 100000-999999 -n 1`,`shuf -i 10-99 -n 1`.`shuf -i 100000-999999 -n 1`" >> "$FILE_NAME"
        done
    }
else
    printf "Usage: sh GenerateCSV.sh <filename without extension> <No of files to generate> \nThe files will be generated with .csv extension\n" 
fi

我希望数据是这样的,应该是镶木地板格式。

2,20-10-2010,23:18:10,23:40:40

我怎么能在火花中做到。

1 个答案:

答案 0 :(得分:0)

您可以尝试此选项。 以下是上述日期的Unix时间戳值。

val ss = SparkSession.builder().appName("local").master("local[*]").getOrCreate() 

ss.sqlContext.sql("SELECT unix_timestamp ('2010-01-01', 'yyyy-MM-dd')") // 1262284200
ss.sqlContext.sql("SELECT unix_timestamp ('2018-12-31', 'yyyy-MM-dd')") // 1546194600

您可以使用以下方式编码,以便在上述数字之间生成随机数。

val r = new scala.util.Random
val x = 1262284200 + r.nextInt((1546194600-1262284200))

您可以使用以上生成的值x

以下面的方式编码,以便在日期之间生成随机日期
ss.sqlContext.sql(s"SELECT FROM_UNIXTIME($x)")