小编cod*_*gle的帖子

可以从具有多个函数的EventListener中实现一个函数吗?

我正在开发一个应用程序来连接基于蓝牙的多传感器(SensorDrone).它总共包含大约15个传感器,所有这些传感器都可以使用芯片制造商创建的第三方闭源库与Android设备进行通信.

第三方库要求我实现一个自定义Java EventListener,它包含每个传感器的函数,当它的数据准备好使用时会被触发:

DroneEventListener droneEventListener = new DroneEventListener() {

    @Override
    public void temperatureMeasured(EventObject arg0) {
        readTemperatureFromDrone();
    }

    @Override
    public void pressureMeasured(EventObject arg0) { /*...*/ }

// Etc...

    @Override
    public void disconnectEvent(EventObject arg0) {
        // Let the user know the bluetooth connection was lost
    }

    @Override
    public void connectEvent(EventObject arg0) {
        // Let the user know the device was connected
    }


};
Run Code Online (Sandbox Code Playgroud)

但是,我希望与另一个名为funf的合作,以获取Android内置传感器的信息.该库非常适合收集内置Android传感器和外部传感器的数据.它通过允许您创建自定义" 探测 "实现来实现此目的.但是,探针(通过库和惯例的建议)一次只能用于一个传感器.

原始问题:

所以,我的问题是这个; 有可能以某种方式将DroneEventListener()类细分为特定的传感器吗?之后,我可以轻松地为多传感器上的每个传感器创建自定义探头.

我意识到尝试细分抽象类可能是不好的做法,因为它在概念上是开发人员的合同.但是,我认为让这个代码与预先存在的,可靠且维护良好的库(funf)一起工作的温和黑客将是值得的.

或者,是否有任何其他创造性的解决方案,允许我使用制造商的库与funf?

编辑(2013年6月24日):

我已经决定使用"细分"这个词语对我来说很清楚.我本质上意味着当我使用的只有一个时,我不想实现20个空白的方法.所选答案精确地解释了如何做到这一点.

精炼问题: …

java sensor event-listener android-sensors

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

用于用户创建的 DRF 序列化器嵌套字段

所以我有一个自定义模型 - Profile,它与 django User 对象具有 OneToOne 关系。

class Profile(models.Model):
    user = OneToOneField(User, on_delete=models.CASCADE)
    profile_type = models.CharField()
Run Code Online (Sandbox Code Playgroud)

我想制作一个 django rest 框架序列化程序,它允许创建和检索用户对象的嵌套属性以及“profile_type”属性。

我希望在 POST 请求中指定的名称就像“用户名”、“密码”、“电子邮件”等一样 - 而不是“profile_username”、“profile_password”……

到目前为止我有

class ProfileSerializer(serializers.ModelSerializer):
    username = serializers.CharField(source='profile_user_username')
    password = serializers.CharField(source='profile_user_password')
    email = serializers.CharField(source='profile_user_email')

    class Meta:
        model = Profile
        fields = ('id',
                  'profile_user_username', 'profile_user_password', 'profile_user_email',
                  'username',
                  'password',
                  'email')
        depth = 2
Run Code Online (Sandbox Code Playgroud)

但是 - 我遇到了一个错误:

ImproperlyConfigured: Field name 'profile_user_username' is not valid for model 'Profile'
Run Code Online (Sandbox Code Playgroud)

我是否得到了嵌套字段的语法错误?或者是别的什么?

django django-models django-authentication django-serializer django-rest-framework

2
推荐指数
1
解决办法
1628
查看次数

来自 SQL 查询的 Spark Dataframe

我正在尝试使用 Apache Spark 将具有多个联接和子选择的(大型)SQL 查询的结果加载到 Spark 的 DataFrame 中,如从SQL 查询创建 Spark Dataframe中所述。

不幸的是,我尝试这样做会导致 Parquet 出现错误:

线程“main”org.apache.spark.sql.AnalysisException 中出现异常:无法推断 Parquet 的架构。必须手动指定。

我从谷歌看到的信息暗示当 DataFrame 为空时会发生此错误。但是,查询结果会在 DBeaver 中加载大量行。

这是一个示例查询:

(SELECT REPORT_DATE, JOB_CODE, DEPT_NBR, QTY
    FROM DBO.TEMP 
    WHERE  BUSINESS_DATE = '2019-06-18' 
    AND   STORE_NBR IN (999) 
    ORDER BY BUSINESS_DATE) as reports
Run Code Online (Sandbox Code Playgroud)

我的 Spark 代码如下所示。

val reportsDataFrame = spark
  .read
  .option("url", db2JdbcUrl)
  .option("dbtable", queries.reports)
  .load()

scheduledHoursDf.show(10)
Run Code Online (Sandbox Code Playgroud)

我在之前的答案中读到,可以使用此方法对整个数据库运行查询。特别是,如果您在第一次在 Spark 中构建 DataFrame 时将“dbtable”参数指定为别名查询。您可以看到我已经在查询中通过将整个查询指定为“as reports”别名来完成此操作。

我不认为这是一个重复的问题。我已经广泛研究了这个具体问题,但没有发现有人在网上面临同样的问题。特别是,运行查询导致的 Parquet 错误。

似乎一致认为不应该以这种方式运行 SQL 查询,而应该使用 Spark 的 DataFrames 的许多方法来过滤、分组和聚合数据。然而,如果能够使用原始 SQL,即使会带来性能损失,对我们来说也是非常有价值的。

sql db2 scala apache-spark parquet

0
推荐指数
1
解决办法
1910
查看次数