[英]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.