簡體   English   中英

自定義處理Apache Spark(Java)中的列

[英]Custom processing on column in Apache Spark (Java)

我在Spark中加載了一個JSON文檔,大致如下:

root
 |-- datasetid: string (nullable = true)
 |-- fields: struct (nullable = true)
...
 |    |-- type_description: string (nullable = true)

我的DF正在將其轉換為:

df = df.withColumn("desc", df.col("fields.type_description"));

一切正常,但type_description的值類似於:“ 1-我的描述類型”。

理想情況下,我希望我的df只包含文本部分,例如“我的描述類型”。 我知道該怎么做,但是如何通過Spark做到呢?

我希望遵循以下原則:

df = df.withColumn("desc", df.col("fields.type_description").call(/* some kind of transformation class / method*/));

謝謝!

通常,Spark提供了廣泛的SQL函數集,從基本的字符串處理實用程序(通過日期/時間處理功能)到不同的統計摘要,不一而足。 這是oassql.functions一部分。 在這種情況下,您可能想要這樣的東西:

import static org.apache.spark.sql.functions.*;

df.withColumn("desc",
  regexp_replace(df.col("fields.type_description"), "^[0-9]*\\s*-\\s*", "")
);

通常,在使用Spark SQL時,這些功能應該是您的首選。 有Catalyst表達式支持,通常提供codegen實用程序。 這意味着您可以從不同的Spark SQL優化中完全受益。

另一種但效率較低的方法是實現自定義UDF。 例如,請參見在SQLContext外部用Java創建SparkSQL UDF

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM