Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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 将字符串标记为“a”;字符串RDD“;返回另一个RDD_Scala_Apache Spark_Scala Collections - Fatal编程技术网

Scala 将字符串标记为“a”;字符串RDD“;返回另一个RDD

Scala 将字符串标记为“a”;字符串RDD“;返回另一个RDD,scala,apache-spark,scala-collections,Scala,Apache Spark,Scala Collections,我有一个单独字符串值的Spark RDD,其中每个字符串由|符号分隔的单词组成 此RDD是通过SparkSQL查询生成的,而不是通过.textFile(…)加载操作生成的 我不能使用.flatMap(u.split(“|”)操作(除非我没有理解一些基本的东西),因为这会在应用.split()之前将每个字符串展平为单个字符 但是,我确实需要做一些类似于.flatMap()的事情,因为我需要一对多的映射。由于我的数据集可能非常大,我需要这个操作来并行化,因此需要使用RDD和相关操作 有趣的是,当处理

我有一个单独字符串值的Spark RDD,其中每个字符串由
|
符号分隔的单词组成

此RDD是通过SparkSQL查询生成的,而不是通过
.textFile(…)
加载操作生成的

我不能使用
.flatMap(u.split(“|”)
操作(除非我没有理解一些基本的东西),因为这会在应用
.split()
之前将每个字符串展平为单个字符

但是,我确实需要做一些类似于
.flatMap()
的事情,因为我需要一对多的映射。由于我的数据集可能非常大,我需要这个操作来并行化,因此需要使用RDD和相关操作

有趣的是,当处理使用
.textFile(…)
加载的RDD中的字符串时,
.flatMap(…)
操作正是我想要的!所以我猜一定有办法

任何帮助或建议都将不胜感激


谢谢

嗯,我不确定我是否理解这个问题,但我会尽力帮助你


.flatMap(u.split(“|”)
中,拆分会打断每行的单词,并在最后将其展平。如果不需要展平结果,也许可以在.textFile()生成的RDD上使用
.map(|.split(|))

加载。flatMap()操作在与适当的.split()一起使用时将字符串拆分为单词。但是,我认为它们在某种程度上是特殊的,就像在其他字符串RDD上一样,.flatmap()似乎首先将字符串展平为字符,然后应用提供的函数。按照建议使用.map()将复合字符串映射到令牌数组。我希望只生成令牌的RDD,而不是它们的数组。
flatMap
应该适用于您的情况。尝试在计算结束时使用以下命令展平:
x.flatMap(y=>y)
。结果是什么?我已经尝试过,
.flatMap(y=>y)
将每个字符串展平为其组成字符,但是,我通过使用
.mapPartions()
实现了最终结果。在这里,我使用提供的迭代器在RDD中循环字符串,然后将每个字符串标记到缓冲区中。我返回了缓冲区的迭代器,即DIY
flatMap()
…睡了一个好觉后,我意识到一个非常愚蠢的错误,这解释了我看到的行为。有关解释,请参见原始问题所附的我的评论。谢谢你的帮助!我不知道还有没有人被这件事抓住了!
.flatMap()
方法工作得很好,当然总是这样!很高兴知道。谢谢分享您的结果。>>在应用.split()之前,这会将每个字符串展平为单个字符,您为什么这么认为?对不起,这是错误的!我让自己感到困惑。这是由我在
|
符号上的拆分引起的,我现在意识到这将被解释为一个正则表达式或操作。因此,我实际上是在
上分裂,当然最终会给我单独的字符!!因此,如果我使用
“”“\\\;”“”
,那么一切都会按预期工作。对不起,谢谢!