java - 如何从两个CSV读取值并在Spark Java API中对其列进行黑白操作?

标签 java hadoop spark-java bigdata

我在hadoop中有两个Csv,例如csv1,csv2。两个csv都包含两列(时间戳和somevalue),例如,对于csv1列为t1,v1,对于csv2列为t2,v2。
我想为每个t1 = t2(对于相同的时间戳)计算v1 * v2,然后使用spark java Api将结果作为文本文件存储在hdfs中。

我是新来的 Spark ,请有人帮助我。

提前感谢。

最佳答案

我可以在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|
+----+---+----+---+---+

我希望这能解决您的问题。

关于java - 如何从两个CSV读取值并在Spark Java API中对其列进行黑白操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40502316/

相关文章:

hadoop - 使用 webhdfs 的 GETFACL 中未显示掩码值

html - 如果提供服务而不是将其视为常规文件,为什么 Html 音频控件在 html 中失败

java - Spark 框架 : Match with or without trailing slash

hadoop - 如何确保 RegexSerDe 可用于我的 Hadoop 节点?

Java Spark 2.3 修剪请求中包含双斜杠的 url

java - 我怎么知道为什么某个 Jar 被添加到我的项目中?

java - Jsoup 在第一个元素之后选择元素

java - Discord4J API(Java)|如何获取服务器用户名的所有者并将其存储在字符串中?

java - 如何重新启动 while 循环以重新启动游戏?

hadoop - FNF:无法执行ssh-base.sh