你好,我是一个新的Spark,我需要这个小练习的帮助。我想在另一个Dataframe中找到某些值,但如果这些值不存在,我想减少每个值的长度,直到找到匹配的值。我有这些Dataframe:
----------------
|values_to_find|
----------------
| ABCDE |
| CBDEA |
| ACDEA |
| EACBA |
----------------
------------------
| list | Id |
------------------
| EAC | 1 |
| ACDE | 2 |
| CBDEA | 3 |
| ABC | 4 |
------------------
我期待下一个结果:
--------------------------------
| Id | list | values_to_find |
--------------------------------
| 4 | ABC | ABCDE |
| 3 | CBDEA | CBDEA |
| 2 | ACDE | ACDEA |
| 1 | EAC | EACBA |
--------------------------------
例如de不存在,所以我将它的长度减少1(d),再次它与任何长度都不匹配,所以我再次减少它,这次我得到了,它匹配,所以我使用该值联接并形成一个新的Dataframe。减少长度时不必担心重复值,但我需要找到完全匹配的值。另外,如果可能的话,我希望避免使用自定义项。
我使用foreach来获取第一个Dataframe中的每个值,并且我可以在那里执行子字符串(如果没有匹配项),但是我不确定如何在第二个Dataframe中查找这些值。最好的方法是什么?我已经看到了大量的自定义项可以做到这一点,但我想避免这一点,如前所述。
df1.foreach { values_to_find =>
df1.get(0).toString.substring(0, 4)}
编辑:那些Dataframe是例子,我有更多的价值观,解决方案应该是动态的。。。迭代一些值并在另一个Dataframe中找到它们的匹配项,如果不存在的话,我需要减少它们的长度。
谢谢你的帮助!
2条答案
按热度按时间bvjxkvbb1#
您可以将dataframe作为临时视图加载并编写sql。上面的场景是您第一次在spark中实现,还是已经在前面的代码中实现了(我的意思是在spark之前您已经在遗留系统中实现了)。使用spark,您可以自由地用scala编写udf或使用sql。对不起,我手边没有解决办法,所以给点提示。
n3ipq98p2#
以下内容将对您有所帮助。
输出: