我有一个脚本将几个csv
文件连接到名为merged_t*.csv
这是脚本:
for i in $(ls -latr sample_*.csv);
do
paste -d, $i >> out_$RANDOM.csv;
done
sed 's/^|$/\x27/g' out_$RANDOM.csv | paste -d, > merged_t$RANDOM.csv
第一个命令"$RANDOM"
中的"out_$RANDOM"
必须与第二个"out_$RANDOM"
中的 val conf = new SparkConf()
.setMaster("local[8]")
.setAppName("Name")
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)
val customSchema = StructType(Array(
StructField("date", DateType, true),
StructField("time",StringType, true),
StructField("am", DoubleType, true),
StructField("hum", DoubleType, true),
StructField("temp", DoubleType, true)
))
val df = sqlContext.read
.format("org.apache.spark.sql.execution.datasources.csv.CSVFileFormat")
.option("header","true")
.option("delimiter",";")
.schema(customSchema)
.load("data.csv")
相同。
我该怎么办?
答案 0 :(得分:1)
首先声明自己的变量:
myrandom=$RANDOM
for i in $(ls -latr sample_*.csv); do
paste -d, $i >> out_${myrandom}.csv;
done
sed 's/^|$/\x27/g' out_${myrandom}.csv | paste -d, > merged_t${myrandom}.csv
答案 1 :(得分:1)
使用已解决问题的命令: mktemp
csv=$(mktemp out_XXXXXXXXXX.csv)
for i in $(ls -latr sample_*.csv);
do
paste -d, $i >> ${csv};
done
sed 's/^|$/\x27/g' ${csv} | paste -d, > merged_t${csv}
答案 2 :(得分:0)
Ipor Sircer已经正确回答你了。解决方案是将$RANDOM
的值保存到变量中。
解释为什么你的问题有错误 -
每次调用$RANDOM
时,它都会完全按照自己的意思生成一个随机数。因此,如果您多次调用它,它将生成不同的随机数。因此,每次调用它都会产生不同的名称。但是,当你调用它一次并将其保存在变量中时,它就不能再改变了(因为它只被称为一次)。
$RANDOM
不是生成随机数的最佳方法。要对此进行测试,您可以执行以下操作 -
for j in {1..500}
do
for i in {1..1000}
do
echo "$RANDOM"
done | awk '{a+=$1} END {print a/NR}'
done
这个小脚本的作用是生成一千个$ RANDOM输出(内循环),然后取1000个数字的平均值。在这个例子中它执行了500次(外部循环)。您将看到$RANDOM
的任何一千次迭代的平均值彼此非常相似(均为16000左右)。这表明在您调用它的不同时间内没有观察到非常好的变化。
更好的方式包括awk
srand
命令。