Scala 在Spark中连接两个HDFS文件
我想使用spark shell连接来自HDFS的两个文件。 这两个文件都是以制表符分隔的,我想在第二列加入 试码 但不给任何输出Scala 在Spark中连接两个HDFS文件,scala,hadoop,apache-spark,Scala,Hadoop,Apache Spark,我想使用spark shell连接来自HDFS的两个文件。 这两个文件都是以制表符分隔的,我想在第二列加入 试码 但不给任何输出 val ny_daily= sc.parallelize(List("hdfs://localhost:8020/user/user/NYstock /NYSE_daily")) val ny_daily_split = ny_daily.map(line =>line.split('\t')) val enKeyValuePair = ny_daily_
val ny_daily= sc.parallelize(List("hdfs://localhost:8020/user/user/NYstock /NYSE_daily"))
val ny_daily_split = ny_daily.map(line =>line.split('\t'))
val enKeyValuePair = ny_daily_split.map(line => (line(0).substring(0, 5), line(3).toInt))
val ny_dividend= sc.parallelize(List("hdfs://localhost:8020/user/user/NYstock/NYSE_dividends"))
val ny_dividend_split = ny_dividend.map(line =>line.split('\t'))
val enKeyValuePair1 = ny_dividend_split.map(line => (line(0).substring(0, 4), line(3).toInt))
enKeyValuePair1.join(enKeyValuePair)
但我并没有得到关于如何连接特定列上的文件的任何信息
请建议
我没有得到关于如何连接特定列上的文件的任何信息
RDD是在其键上连接的,因此您在编写以下内容时决定连接列:
val enKeyValuePair = ny_daily_split.map(line => (line(0).substring(0, 5), line(3).toInt))
...
val enKeyValuePair1 = ny_daily_split.map(line => (line(0).substring(0, 4), line(3).toInt))
您的RDD将在来自行(0).子字符串(0,5)
和行(0).子字符串(0,4)
的值上联接
您可以找到join
函数(以及许多其他有用的函数),并且是了解Spark工作原理的重要参考
已尝试编写代码,但未给出任何输出
val ny_daily= sc.parallelize(List("hdfs://localhost:8020/user/user/NYstock /NYSE_daily"))
val ny_daily_split = ny_daily.map(line =>line.split('\t'))
val enKeyValuePair = ny_daily_split.map(line => (line(0).substring(0, 5), line(3).toInt))
val ny_dividend= sc.parallelize(List("hdfs://localhost:8020/user/user/NYstock/NYSE_dividends"))
val ny_dividend_split = ny_dividend.map(line =>line.split('\t'))
val enKeyValuePair1 = ny_dividend_split.map(line => (line(0).substring(0, 4), line(3).toInt))
enKeyValuePair1.join(enKeyValuePair)
要查看输出,您必须要求Spark打印输出:
enKeyValuePair1.join(enKeyValuePair).foreach(println)
注意:要从文件中加载数据,应使用sc.textFile()
:sc.parallelize()
仅用于从Scala集合生成RDD
应使用以下代码执行此操作:
val ny_daily_split = sc.textFile("hdfs://localhost:8020/user/user/NYstock/NYSE_daily").map(line =>line.split('\t'))
val ny_dividend_split = sc.textFile("hdfs://localhost:8020/user/user/NYstock/NYSE_dividends").map(line =>line.split('\t'))
val enKeyValuePair = ny_daily_split.map(line => line(0).substring(0, 5) -> line(3).toInt)
val enKeyValuePair1 = ny_dividend_split.map(line => line(0).substring(0, 4) -> line(3).toInt)
enKeyValuePair1.join(enKeyValuePair).foreach(println)
顺便问一下,您提到您想加入第二列,但实际上您正在使用行(0)
,这是有意的吗
希望这有帮助
我没有得到关于如何连接特定列上的文件的任何信息
RDD是在其键上连接的,因此您在编写以下内容时决定连接列:
val enKeyValuePair = ny_daily_split.map(line => (line(0).substring(0, 5), line(3).toInt))
...
val enKeyValuePair1 = ny_daily_split.map(line => (line(0).substring(0, 4), line(3).toInt))
您的RDD将在来自行(0).子字符串(0,5)
和行(0).子字符串(0,4)
的值上联接
您可以找到join
函数(以及许多其他有用的函数),并且是了解Spark工作原理的重要参考
已尝试编写代码,但未给出任何输出
val ny_daily= sc.parallelize(List("hdfs://localhost:8020/user/user/NYstock /NYSE_daily"))
val ny_daily_split = ny_daily.map(line =>line.split('\t'))
val enKeyValuePair = ny_daily_split.map(line => (line(0).substring(0, 5), line(3).toInt))
val ny_dividend= sc.parallelize(List("hdfs://localhost:8020/user/user/NYstock/NYSE_dividends"))
val ny_dividend_split = ny_dividend.map(line =>line.split('\t'))
val enKeyValuePair1 = ny_dividend_split.map(line => (line(0).substring(0, 4), line(3).toInt))
enKeyValuePair1.join(enKeyValuePair)
要查看输出,您必须要求Spark打印输出:
enKeyValuePair1.join(enKeyValuePair).foreach(println)
注意:要从文件中加载数据,应使用sc.textFile()
:sc.parallelize()
仅用于从Scala集合生成RDD
应使用以下代码执行此操作:
val ny_daily_split = sc.textFile("hdfs://localhost:8020/user/user/NYstock/NYSE_daily").map(line =>line.split('\t'))
val ny_dividend_split = sc.textFile("hdfs://localhost:8020/user/user/NYstock/NYSE_dividends").map(line =>line.split('\t'))
val enKeyValuePair = ny_daily_split.map(line => line(0).substring(0, 5) -> line(3).toInt)
val enKeyValuePair1 = ny_dividend_split.map(line => line(0).substring(0, 4) -> line(3).toInt)
enKeyValuePair1.join(enKeyValuePair).foreach(println)
顺便问一下,您提到您想加入第二列,但实际上您正在使用行(0)
,这是有意的吗
希望这有帮助 当我想在列上加入并作为输出时,我应该在JOIN的键和值中输入什么?我应该能够看到整个加入的数据集。然后将
map
函数更改为ny\u daily\u split.map(line=>line(1)->line.mkString(“\t”)
和ny\u split.map(line=>line(1)->line.mkString(“\t”))
分别。我应该在JOIN的键和值中输入什么,因为我想在列上加入,并且作为输出,我应该能够看到整个加入的数据集。然后将map
函数更改为ny\u daily\u split.map(line=>line(1)->line.mkString(“\t”)
和ny\u split.map(line=>line(1)->line.mkString(\t”))
。