Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 在Spark中连接两个HDFS文件_Scala_Hadoop_Apache Spark - Fatal编程技术网

Scala 在Spark中连接两个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_

我想使用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_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”))