2016-11-09 6 views
-1

У меня есть два Csv в hadoop, скажем csv1, csv2. Оба csvs содержат два столбца (временная метка и некоторое значение), например, для столбцов csv1: t1, v1, а для столбцов csv2 - t2, v2. Я хочу рассчитать v1 * v2 для каждого t1 = t2 (для той же метки времени) и сохранить результат в виде текстового файла в hdfs, используя искру java Api.Как читать значения из двух csv и выполнять операцию на ч/б столбце в искровом java api?

Я новичок в искру, плз мне кто-то помогает.

Thanx заранее.

ответ

0

я могу сделать это в Скале, может быть, вы можете получить суть того, что я делаю, и реализовать его самостоятельно:

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| 
+----+---+----+---+---+ 

Я надеюсь, что это решит вашу проблему.

+0

Thanx для решения, я пробовал с этой концепцией, но не получал точное решение. Столбец timestamp содержит такие значения, как 2016-09-01 15: 31: 58 + 00: 00. И я хочу загрузить csv и разбить его на столбцы, и результат должен выглядеть как (t1, v * v2). –

+0

Затем сначала конвертируйте его в искробезопасную метку, а затем выполните эти шаги или если вы хотите сделать это простым способом, просто используйте вместо нее строку. –

 Смежные вопросы

  • Нет связанных вопросов^_^