小编Dan*_*nai的帖子

使用Retrofit刷新OAuth令牌而不修改所有调用

我们在Android应用中使用Retrofit与OAuth2安全服务器进行通信.一切都很好,我们使用RequestInterceptor在每次调用时包含访问令牌.但是,有时候,访问令牌将过期,并且需要刷新令牌.当令牌过期时,下一个调用将返回一个未授权的HTTP代码,因此很容易监控.我们可以通过以下方式修改每个Retrofit调用:在失败回调中,检查错误代码,如果它等于Unauthorized,则刷新OAuth令牌,然后重复Retrofit调用.但是,为此,应修改所有呼叫,这不是一个易于维护的好解决方案.有没有办法在不修改所有Retrofit调用的情况下执行此操作?

android oauth-2.0 retrofit

141
推荐指数
4
解决办法
6万
查看次数

如何在Spark窗口函数中使用降序的orderby()?

我需要一个窗口函数,它按一些键(=列名称)进行分区,按另一个列名称进行排序,并返回前x行的行.

这适用于升序:

def getTopX(df: DataFrame, top_x: String, top_key: String, top_value:String): DataFrame ={
    val top_keys: List[String] = top_key.split(", ").map(_.trim).toList
    val w = Window.partitionBy(top_keys(1),top_keys.drop(1):_*)
       .orderBy(top_value)
    val rankCondition = "rn < "+top_x.toString
    val dfTop = df.withColumn("rn",row_number().over(w))
      .where(rankCondition).drop("rn")
  return dfTop
}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试将其更改为第4行orderBy(desc(top_value))orderBy(top_value.desc)第4行时,我收到语法错误.这里的语法是什么?

scala apache-spark apache-spark-sql spark-dataframe

19
推荐指数
2
解决办法
4万
查看次数

spring boot autoconfiguration with jdbc template autowiring dataSource issue

我是Spring和J2EE的新手.我在使用带有Spring Boot自动配置的JDBC模板时遇到了麻烦.

我做的是我采用这里提供的RESTful Web服务的例子, 并决定扩展它以使用JDBC模板关系数据库访问.不幸的是,提供的另一个例子没有用,因为不考虑从xml beans文件提供dataSource的唯一困难.

我试图解决这个问题:

  1. 使用DAO Impl类作为Spring的不同实现的扩展.
  2. 添加到bean文件.
  3. 使用不同的DataSource类(例如DriverManagerDataSource).
  4. 试图在另一个类中自动装配一个简单的属性(比数据源更复杂的东西).
  5. 在开始时我刚刚编写了DAO类,但是后来我可能只有在实现了接口时才可以自动装配数据源,尝试它,没有帮助.

我尝试了在Stack或Google上找到的所有内容.大多数示例都严重过时或未得到答复,或与Spring Boot Autoconfiguration等无关.

我不断得到Property 'dataSource' is required错误,经过努力,如果最终设法将application-config.xml文件与bean 链接,但无法设法为JDBC的数据源自动装配.

我绝望地完成它并严重阻止,出于想法,如果有人可以提供最新的示例与Spring Boot自动配置,XML中的bean查找,JDBC的自动装配数据源,我会很高兴.

或者至少是一些想法,线索,甚至是如何寻找它,因为我甚至没有谷歌的关键词.

谢谢!

在此输入图像描述

Spring Application类.

package ws;

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.SpringApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;

@Configuration
@ComponentScan
@ImportResource("classpath:spring/application-config.xml")
@EnableAutoConfiguration
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)

Web服务类.

package ws;

import dao.UserDAOImpl;
import model.User;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public …
Run Code Online (Sandbox Code Playgroud)

spring datasource jdbc autowired spring-boot

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

Apache spark:在提交或Spark启动时设置spark.eventLog.enabled和spark.eventLog.dir

我想设置spark.eventLog.enabledspark.eventLog.dirspark-submitstart-all级别 - 不要求它在scala/java/python代码中启用.我尝试了各种各样的事情但没有成功:

设置spark-defualts.conf

spark.eventLog.enabled           true
spark.eventLog.dir               hdfs://namenode:8021/directory
Run Code Online (Sandbox Code Playgroud)

要么

spark.eventLog.enabled           true
spark.eventLog.dir               file:///some/where
Run Code Online (Sandbox Code Playgroud)

运行spark-submit方式:

spark-submit --conf "spark.eventLog.enabled=true" --conf "spark.eventLog.dir=file:///tmp/test" --master spark://server:7077 examples/src/main/python/pi.py
Run Code Online (Sandbox Code Playgroud)

用环境变量启动spark:

SPARK_DAEMON_JAVA_OPTS="-Dspark.eventLog.enabled=true -Dspark.history.fs.logDirectory=$sparkHistoryDir -Dspark.history.provider=org.apache.spark.deploy.history.FsHistoryProvider -Dspark.history.fs.cleaner.enabled=true -Dspark.history.fs.cleaner.interval=2d"
Run Code Online (Sandbox Code Playgroud)

只是为了矫枉过正:

SPARK_HISTORY_OPTS="-Dspark.eventLog.enabled=true -Dspark.history.fs.logDirectory=$sparkHistoryDir -Dspark.history.provider=org.apache.spark.deploy.history.FsHistoryProvider -Dspark.history.fs.cleaner.enabled=true -Dspark.history.fs.cleaner.interval=2d"
Run Code Online (Sandbox Code Playgroud)

这些事情必须在何处以及如何设定以获取任意工作的历史?

apache-spark

14
推荐指数
1
解决办法
1万
查看次数

Spark mapWithState API说明

我一直mapWithState在Spark Streaming中使用API,但有两点不清楚StateSpec.function:

假设我的功能是:

def trackStateForKey(batchTime: Time,
                     key: Long,
                     newValue: Option[JobData],
                     currentState: State[JobData]): Option[(Long, JobData)]
Run Code Online (Sandbox Code Playgroud)
  1. 为什么新值是一种Option[T]类型?据我所知,它总是为我定义,并且因为该方法应该以新状态调用,所以我真的没有看到为什么它可以是可选的.

  2. 返回值是什么意思?我试图在文档和源代码中找到一些指针,但没有一个描述它的用途.由于我正在使用state.remove()和修改密钥的状态state.update(),为什么我必须对返回值执行相同的操作?

    在我当前的实现中,None如果我删除密钥,我将返回,Some(newState)如果我更新它,但我不确定这是否正确.

scala apache-spark spark-streaming

8
推荐指数
1
解决办法
5154
查看次数

如何通过Kotlin Android扩展插件禁用合成视图属性的生成

Kotlin Android扩展插件会为每个视图生成静态属性,并带有我的应用布局文件中的ID,如文档所述

我想禁用此功能,因为我们使用DataBinding而不是Kotlin综合视图属性,有时我是无意中导入它们的;还会增加一些我们不使用的东西的额外构建开销。

无法禁用Android扩展插件,因为我们使用了由同一插件完成的Parcelize功能。

android kotlin kotlin-android-extensions

7
推荐指数
2
解决办法
492
查看次数

Kafka主题分区和Spark执行程序映射

我正在使用带有kafka主题的火花流。主题创建有5个分区。我的所有消息都使用表名作为键发布到kafka主题。鉴于此,我假设该表的所有消息都应转到同一分区。但我注意到在同一张表的Spark日志消息中,有时会到达执行者的node-1,有时会到达执行者的node-2。

我正在使用以下命令在yarn-cluster模式下运行代码:

spark-submit --name DataProcessor --master yarn-cluster --files /opt/ETL_JAR/executor-log4j-spark.xml,/opt/ETL_JAR/driver-log4j-spark.xml,/opt/ETL_JAR/application.properties --conf "spark.driver.extraJavaOptions=-Dlog4j.configuration=driver-log4j-spark.xml" --conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=executor-log4j-spark.xml" --class com.test.DataProcessor /opt/ETL_JAR/etl-all-1.0.jar
Run Code Online (Sandbox Code Playgroud)

该提交创建了一个驱动程序,可以在node-1上说,在node-1和node-2上可以说两个执行程序。

我不希望节点1和节点2执行程序读取相同的分区。但这正在发生

还尝试了以下配置以指定使用者组,但没有区别。

kafkaParams.put("group.id", "app1");
Run Code Online (Sandbox Code Playgroud)

这就是我们使用createDirectStream方法创建流的方式*不是通过zookeeper。

    HashMap<String, String> kafkaParams = new HashMap<String, String>();
    kafkaParams.put("metadata.broker.list", brokers);
    kafkaParams.put("auto.offset.reset", "largest");
    kafkaParams.put("group.id", "app1");

        JavaPairInputDStream<String, String> messages = KafkaUtils.createDirectStream(
                jssc, 
                String.class, 
                String.class,
                StringDecoder.class, 
                StringDecoder.class, 
                kafkaParams, 
                topicsSet
        );
Run Code Online (Sandbox Code Playgroud)

完整代码:

import java.io.Serializable;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;

import org.apache.commons.lang3.StringUtils;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.api.java.function.VoidFunction;
import org.apache.spark.streaming.Durations;
import org.apache.spark.streaming.api.java.JavaDStream;
import org.apache.spark.streaming.api.java.JavaPairInputDStream;
import org.apache.spark.streaming.api.java.JavaStreamingContext;
import org.apache.spark.streaming.api.java.JavaStreamingContextFactory;
import …
Run Code Online (Sandbox Code Playgroud)

java apache-kafka apache-spark spark-streaming kafka-consumer-api

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

Android Studio 3.0中的DexGuard集成

我已将我的Android项目升级为使用最新的Android Studio 3.0功能.从那时起,我在每个Gradle同步上收到以下警告消息:

警告:您使用的其中一个插件支持Java 8语言功能.要尝试Android插件中内置的支持,请从build.gradle中删除以下内容:apply plugin:'dexguard'要了解详情,请访问https://d.android.com/r/tools/java-8-support -message.html

如果我转到链接的网址,我可以看到:

如果Android Studio检测到您的项目使用的是Jack,Retrolambda或DexGuard,则IDE会使用这些工具提供的Java 8支持.

有Jack和Retrolambda的迁移文档,但DexGuard没有.

我的问题是:

  • 我可以删除DexGuard插件,它仍然可以按预期工作吗?
  • 如果不是,我应该如何解决此警告?

我正在运行Android Studio 3.0和DexGuard 8.0.16

dexguard android-studio-3.0

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