小编Ami*_*ngh的帖子

在 Scala 3 中将枚举(反)序列化为字符串

我试图找到一种简单而有效的方法来使用 Scala 3 来(反)序列化枚举circe

考虑以下示例:

import io.circe.generic.auto._
import io.circe.syntax._

enum OrderType:
  case BUY
  case SELL

case class Order(id: Int, `type`: OrderType, amount: String)
val order = Order(1, OrderType.SELL, "123.4")
order.asJson
Run Code Online (Sandbox Code Playgroud)

序列化数据后,它变成

{
  "id" : 1,
  "type" : {
    "SELL" : {
      
    }
  },
  "amount" : "123.4"
}
Run Code Online (Sandbox Code Playgroud)

代替

{
  "id" : 1,
  "type" : "SELL",
  "amount" : "123.4"
}
Run Code Online (Sandbox Code Playgroud)

这就是我想要的。

我知道我可以为此编写一个自定义(反)序列化器,它将解决这个特定实例的问题,如下所示:

implicit val encodeOrderType: Encoder[OrderType] = (a: OrderType) =>
  Encoder.encodeString(a.toString)
  
implicit def decodeOrderType: Decoder[OrderType] = (c: HCursor) => …
Run Code Online (Sandbox Code Playgroud)

serialization scala circe scala-3

7
推荐指数
1
解决办法
2258
查看次数

Airflow 2.0 API 响应 403 禁止

我正在尝试通过 Airflow 2.0 REST API 触发新的 dag 运行。如果我登录到远程计算机上的 Airflow Web 服务器并转到 swagger 文档页面来测试 API,则调用成功。如果我注销或者 API 调用是通过 Postman 或curl 发送的,那么我会收到 403 禁止消息。无论我是否提供 Web 服务器用户名密码,curl 或 postman 都会收到相同的 403 错误消息。

curl -X POST --user "admin:blabla" "http://10.0.0.3:7863/api/v1/dags/tutorial_taskflow_api_etl/dagRuns" -H  "accept: application/json" -H  "Content-Type: application/json" -d "{\"conf\":{},\"dag_run_id\":\"string5\"}"
{
  "detail": null,
  "status": 403,
  "title": "Forbidden",
  "type": "https://airflow.apache.org/docs/2.0.0/stable-rest-api-ref.html#section/Errors/PermissionDenied"
}
Run Code Online (Sandbox Code Playgroud)

API 的安全性已更改为默认值,而不是 deny_all (auth_backend = airflow.api.auth.backend.default)。Airflow 的安装是使用 ubuntu 18 Bionic 使用 pip 完成的。如果手动或计划触发,DAG 运行良好。数据库后端是postgres。

还尝试将 cookie 详细信息从 Chrome 复制到邮递员中以解决此问题,但它不起作用。

这是上述两个调用的 Web 服务器日志。

airflowWebserver_container | 10.0.0.4 - - [05/Jan/2021:06:35:33 …
Run Code Online (Sandbox Code Playgroud)

airflow airflow-scheduler

6
推荐指数
1
解决办法
6753
查看次数

Hive Metastore 中的上次访问时间更新

我在我的 Hive 控制台/.hiverc文件中使用以下属性,以便每当我查询表时,它都会更新Hive 元存储表中的LAST_ACCESS_TIMETBLS

set hive.exec.pre.hooks = org.apache.hadoop.hive.ql.hooks.UpdateInputAccessTimeHook$PreExec;
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用spark-sqlor spark-shell,它似乎不起作用并且LAST_ACCESS_TIME不会在 hive Metastore 中更新。

这是我阅读表格的方式:

>>> df = spark.sql("select * from db.sometable")
>>> df.show()
Run Code Online (Sandbox Code Playgroud)

我已经hive-site.xml/etc/hive/conf和 中设置了上述钩子/etc/spark/conf

hive apache-spark apache-spark-sql pyspark

5
推荐指数
1
解决办法
398
查看次数