所以据我所知 Apache Spark 没有模仿更新SQL 命令的功能。就像,我可以在特定条件下更改列中的单个值。解决这个问题的唯一方法是使用我被指示使用的以下命令(在 Stackoverflow 中):withColumn(columnName, where('condition', value));
然而,该条件应的column类型,这意味着我已经使用内置在柱过滤功能的Apache有(equalTo,isin,lt,gt,等等)。有没有一种方法可以代替使用 SQL 语句而不是那些内置函数?
问题是我得到了一个包含 SQL 语句的文本文件,例如WHERE ID > 5orWHERE AGE != 50等。然后我必须根据这些条件标记值,我想遵循该withColumn()方法,但我无法在其中插入 SQL 语句功能。知道如何解决这个问题吗?
我正在使用 Apache Spark 开展多个项目,并且一直停留在异常/离群值检测部分。
我使用聚类技术来查找异常,其想法是异常/离群值将形成自己的聚类,这意味着被视为异常的数据点实际上是聚类中心。如果与数据量相关的异常值很少,则此方法有效,但如果有很多异常值,则此方法不起作用。到目前为止,这是我的代码:https: //github.com/Guillermo19/MyTest/blob/3511d33f5c7336adef04f2f93a69f1af7865e066/anomalyDetection.java
我确信我的离群点成为聚类中心的想法是正确的,但这取决于生成的聚类数量,并且到目前为止数据本身和聚类数量之间没有任何关系,所以我找不到一个根据可能的异常值的数量来增加聚类的方法。
我可以在程序中修复/修改哪些内容才能使用聚类正确显示异常值?
或者如果我可以使用不同的方法解决这个问题请告诉我。我个人认为聚类是查找异常值最可行、最好的方法之一......
编辑:这是我迄今为止一直在工作的数据,以及预期的异常结果:
第一个文件:
Name Size Records
File1 1000 104370
File2 997 103121
File3 1500 109123
File4 2170 113888
File5 2000 111974
File6 1820 110666
File7 1200 106771
File8 1500 108991
File9 1000 104007
File10 1300 107037
File11 1900 111109
File12 1430 108051
File13 1780 110006
File14 2010 114449
File15 2017 114889
File16 800 88812 //possible outlier. My program does indeed show this
File17 1307 107098
File18 1519 109321
File19 1641 110777
File20 …Run Code Online (Sandbox Code Playgroud)