为了测试我的一个应用程序,我需要一些镶木地板格式的大数据。我没有。我已经编写了一个执行缓慢的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
我怎么能在火花中做到。
答案 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)")