如何在spark java api中从两个csv读取值并对其列执行b/w操作?
我在hadoop中有两个Csv,比如csv1,csv2。两个CSV都包含两列(timestamp和somevalue),比如csv1列是t1,v1,csv2列是t2,v2。 我想计算每个t1=t2的v1*v2(对于相同的时间戳),并使用spark java Api将结果作为文本文件存储在hdfs中 我是新手,请有人帮帮我如何在spark java api中从两个csv读取值并对其列执行b/w操作?,java,hadoop,spark-java,bigdata,Java,Hadoop,Spark Java,Bigdata,我在hadoop中有两个Csv,比如csv1,csv2。两个CSV都包含两列(timestamp和somevalue),比如csv1列是t1,v1,csv2列是t2,v2。 我想计算每个t1=t2的v1*v2(对于相同的时间戳),并使用spark java Api将结果作为文本文件存储在hdfs中 我是新手,请有人帮帮我 Thanx提前。我可以在scala中完成,也许您可以了解我正在做的事情的要点并自己实现: scala> val df1=sc.parallelize(Seq((1001,
Thanx提前。我可以在scala中完成,也许您可以了解我正在做的事情的要点并自己实现:
scala> val df1=sc.parallelize(Seq((1001,2),(1002,3),(1003,4))).toDF("t1","v1")
df1: org.apache.spark.sql.DataFrame = [t1: int, v1: int]
scala> val df2=sc.parallelize(Seq((1001,3),(1002,4),(1005,4))).toDF("t2","v2")
df2: org.apache.spark.sql.DataFrame = [t2: int, v2: int]
scala> df1.join(df2,df1("t1")===df2("t2"))
res1: org.apache.spark.sql.DataFrame = [t1: int, v1: int ... 2 more fields]
scala> res1.show
+----+---+----+---+
| t1| v1| t2| v2|
+----+---+----+---+
|1002| 3|1002| 4|
|1001| 2|1001| 3|
+----+---+----+---+
scala> import org.apache.spark.sql.functions._
import org.apache.spark.sql.functions._
scala> val result=res1.withColumn("foo",res1("v1") * res1("v2"))
result: org.apache.spark.sql.DataFrame = [t1: int, v1: int ... 3 more fields]
scala> result.show
+----+---+----+---+---+
| t1| v1| t2| v2|foo|
+----+---+----+---+---+
|1002| 3|1002| 4| 12|
|1001| 2|1001| 3| 6|
+----+---+----+---+---+
我希望这能解决您的问题。Thanx对于解决方案,我尝试了这些概念,但没有得到精确的解决方案。时间戳列包含类似2016-09-01 15:31:58+00:00的值。我想加载csv并将其拆分为列,结果应该类似于(t1,v*v2)。然后首先使用convert将其转换为spark timestamp,然后执行这些步骤,或者如果您想以一种简单的方式执行,只需使用string即可。