regex - 如何在 spark hive 中应用带有 unicode 字符的 regexp_replace
问题描述
我正在尝试计算 spark 数据框中字符串中表情符号的出现次数。我使用 SQLTransformer。我的声明:
select LENGTH(regexp_replace(text, '[^\\uD83C-\\uDBFF\\uDC00-\\uDFFF]+', '')) as count_emoji from __THIS__
但是这个说法是行不通的。
我究竟做错了什么?
解决方案
看起来您的 SQLTransform 正在工作。请找到如下代码。
object SparkHiveExample extends App {
val spark = SparkSession
.builder()
.master("local")
.appName("Spark Hive Example")
.getOrCreate()
import spark.implicits._
//Prepare Test Data
val df = Seq("hello, how are you?\uD83D\uDE0A\uD83D\uDE0A\uD83D\uDE0A")
.toDF("text")
df.show(false)
+-------------------------+
|text |
+-------------------------+
|hello, how are you?|
+-------------------------+
df.createOrReplaceTempView("__THIS__")
val finalDf = spark.sql("select LENGTH(regexp_replace(text,'[^\\\\uD83C-\\\\uDBFF\\\\uDC00-\\\\uDFFF]+', '')) as count_emoji from __THIS__")
finalDf.show(false)
+-----------+
|count_emoji|
+-----------+
|3 |
+-----------+
}
如果您想从 Hive 表中读取数据,则使用 HiveSupport 实例化SparkSession,并通过放置 hive-site.xml、core-site.xml(用于安全配置)和 hdfs-site.xml(用于 HDFS 配置)来完成 Hive 的配置文件在 conf/.
// warehouseLocation points to the default location for managed databases and tables
val warehouseLocation = new File("spark-warehouse").getAbsolutePath
val spark = SparkSession
.builder()
.appName("Spark Hive Example")
.config("spark.sql.warehouse.dir", warehouseLocation)
.enableHiveSupport()
.getOrCreate()
推荐阅读
- node.js - 同一个变量中的不同值
- css - 如何在 Sass/HTML 中使用 if/else 条件?
- amazon-web-services - 并行运行 AWS CodeBuild 步骤的最佳方法?
- raspberry-pi - Windows 10 IoT - DeviceInformation.FindAllAsync() 返回空集合
- vue.js - 更新数组内的对象不会触发更新
- javascript - 如何在所有文档中使用 Firebase?
- python - 如何将数据框结果保存到数据块中的表中?
- c - 模幂函数为 c 中的大输入生成不正确的结果
- r - ARIMA 预测中的外生变量是否应该时移?相关性是一个好的预测指标吗?
- sap - 多个 B2BUnit 的挑战