真的...已经讨论了很多.
然而,有很多歧义和一些答案提供...包括在jar/executor /驱动程序配置或选项中复制jar引用.
对于每个选项,应澄清含糊不清,不清楚和/或省略的细节:
--jarsSparkContext.addJar(...) 方法SparkContext.addFile(...) 方法 --conf spark.driver.extraClassPath=... 要么 --driver-class-path ...--conf spark.driver.extraLibraryPath=..., 要么 --driver-library-path ...--conf spark.executor.extraClassPath=...--conf spark.executor.extraLibraryPath=...我知道在哪里可以找到主要的spark文档,特别是关于如何提交,可用的选项以及JavaDoc.然而,这对我来说仍然有一些漏洞,尽管它也有部分回答.
我希望它不是那么复杂,有人可以给我一个清晰简洁的答案.
如果我从文档中猜测,似乎--jars和SparkContext addJar,addFile方法是自动分发文件的方法,而其他选项只是修改ClassPath.
假设为简单起见,我可以安全地使用3个主要选项同时添加其他应用程序jar文件:
spark-submit --jar additional1.jar,additional2.jar \
--driver-library-path additional1.jar:additional2.jar \
--conf spark.executor.extraLibraryPath=additional1.jar:additional2.jar \
--class MyClass main-application.jar
Run Code Online (Sandbox Code Playgroud)
找到一篇关于另一篇文章答案的好文章.然而没有什么新学到的 海报确实很好地评论了本地驱动程序(纱线客户端)和远程驱动程序(纱线群集)之间的区别.记住这一点非常重要.
我注意到java.time.format.DateTimeFormatter无法按预期解析.见下文:
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class Play {
public static void tryParse(String d,String f) {
try {
LocalDate.parse(d, DateTimeFormatter.ofPattern(f));
System.out.println("Pass");
} catch (Exception x) {System.out.println("Fail");}
}
public static void main(String[] args) {
tryParse("26-may-2015","dd-L-yyyy");
tryParse("26-May-2015","dd-L-yyyy");
tryParse("26-may-2015","dd-LLL-yyyy");
tryParse("26-May-2015","dd-LLL-yyyy");
tryParse("26-may-2015","dd-M-yyyy");
tryParse("26-May-2015","dd-M-yyyy");
tryParse("26-may-2015","dd-MMM-yyyy");
tryParse("26-May-2015","dd-MMM-yyyy");
}
}
Run Code Online (Sandbox Code Playgroud)
只有最后一次尝试tryParse("26-May-2015","dd-MMM-yyyy");将"通过".根据文档LLL应该能够解析出文本格式.也不是大写'M'与小写'm'的细微差别.
这真的很烦人,因为我无法默认解析Oracle DB默认格式化的字符串
SELECT TO_DATE(SYSDATE,'DD-MON-YYYY') AS dt FROM DUAL;
Run Code Online (Sandbox Code Playgroud)
同样,对于以下程序:
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class Play {
public static void output(String f) {
LocalDate d = LocalDate.now();
Locale l = …Run Code Online (Sandbox Code Playgroud) 以下代码如何工作:
#{aaa.id}
<h:inputText id="txt1" binding="#{aaa}"/>
Run Code Online (Sandbox Code Playgroud)
我的意思是,通常组件绑定工作,通过在bean中指定属性(类型为UIComponent).这里没有bean也没有属性但是名称"aaa"被正确绑定(显示组件id - "txt1").它是如何工作的/指定的位置?
谢谢
更新:JSF2.0规范[pdf](第3.1.5章)说:
"组件绑定是一种特殊的值表达式,可用于促进将组件实例"连接"到JavaBean的相应属性...指定的ValueExpression必须指向UIComponent类型的读写JavaBeans属性(或适当的)子类)."
我想知道是否有可能观察到多个JSF 2.0会话作用域支持bean的CDI事件.我以为我可以通过观察事件将事件/数据推送到多个会话.
我已经设置了一个小测试,允许用户使用页面上的按钮触发事件(它与会话范围的支持bean中实际触发事件的方法相关联).我认为,如果我打开两个不同的浏览器,将创建两个会话,并且事件将通知每个会话范围的支持bean.
但是,当运行我的小测试并单击按钮以在其中一个浏览器上触发事件时,我看到该事件仅通知其中一个会话范围的bean.它只通知触发事件的bean(即 - 如果我单击浏览器1中的按钮,则会通知浏览器1中支持会话的会话范围bean,如果我单击浏览器2中的按钮,则支持会话的bean浏览器2被通知).
我的印象是事件会通知所有bean实例.但是,情况似乎并非如此.我能做到吗?我只是设置错误吗?
更新以显示我的代码:
用于触发事件并显示会话范围数据的jsfpage.xhtml片段:
Run Code Online (Sandbox Code Playgroud)<h:form> <h:outputText value="#{BackingBean.property}" /> <p:commandButton value="Fire Event" action="#{EventFirer.fireEvent}" /> </h:form>
接收事件的Session-scoped bean:
@Named
@SessionScoped
public class BackingBean implements Serializable {
private String property;
public String getProperty() {
return property
}
public void listenForChange(@Observes EventObj event) {
logger.log(Level.INFO, "Event received");
property = event.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
用于触发事件的应用程序作用域bean:
@Named
@ApplicationScoped
public class EventFirer implements Serializable {
@Inject
private Event<EventObj> events;
public String fireEvent() {
logger.log(Level.INFO, "Event fired");
events.fire(new EventObj());
return null;
}
}
Run Code Online (Sandbox Code Playgroud) 在Maven中settings.xml,我想定义一个SSH服务器并提供:
我不想:
~/.ssh/known_hosts文件因此,StackExchange上的现有答案对我没有帮助,其中包括:
NullKnownHostProvider和设置hostKeyChecking为no.~/.ssh/known_hosts文件中输入的hostkey.这是我如何设想它可以在maven中设置的一个例子setup.xml:
<servers>
<server>
<id>gitcloud.myserver.net:8001</id>
<username>git</username>
<privateKey>C:/data/home/.ssh/id_rsa</privateKey>
<configuration>
<knownHostsProvider implementation="org.apache.maven.wagon.providers.ssh.knownhost.SingleKnownHostProvider">
<hostKeyChecking>yes</hostKeyChecking>
<contents>codecloud.web.att.com ssh-rsa XXXXA3NvvFakeSSHKEYsdfADA...doLQ==</contents>
</knownHostsProvider>
</configuration>
</server>
</servers>
Run Code Online (Sandbox Code Playgroud) 我正在寻找如何在Windows下使用Java获取系统代理信息的方式,但我发现只有一种方法.但它对我不起作用.
public static void main(String[] args) throws Throwable {
System.setProperty("java.net.useSystemProxies", "true");
System.out.println("detecting proxies");
List<Proxy> pl = ProxySelector.getDefault().select(new URI("http://ihned.cz/"));
for (Proxy p : pl)
System.out.println(p);
Proxy p = null;
if (pl.size() > 0) //uses first one
p = pl.get(0);
System.out.println(p.address());
System.out.println("Done");
}
Run Code Online (Sandbox Code Playgroud)
当我运行程序时,我得到:
detecting proxies
DIRECT
null
Done
Run Code Online (Sandbox Code Playgroud)
Java意味着,我直接位于互联网上.但这是错的.我落后于代理人.我无法为我的电脑获得解决方案.
我需要每天更新一个非常大的(300M记录)和广泛的TABLE1.更新的源数据位于另一个表中UTABLE,该表是行的10%-25%TABLE1但是很窄.两个表都record_id作为主键.
目前,我正在TABLE1使用以下方法重新创建:
<!-- language: sql -->
1) SELECT (required columns) INTO TMP_TABLE1
FROM TABLE1 T join UTABLE U on T.record_id=U.record_id
2) DROP TABLE TABLE1
3) sp_rename 'TMP_TABLE1', 'TABLE1'
Run Code Online (Sandbox Code Playgroud)
但是,我的服务器上需要将近40分钟(SQL Server为60GB的RAM).我希望获得50%的性能提升 - 我可以尝试其他选项吗?
MERGE并且UPDATE- 类似下面的代码只适用于非常小的UTABLE表 - 在完整大小时,所有内容都会挂起:
<!-- language: SQL -->
MERGE TABLE1 as target
USING UTABLE as source
ON target.record_id = source.record_id
WHEN MATCHED THEN
UPDATE SET Target.columns=source.columns
Run Code Online (Sandbox Code Playgroud)我听说我可以使用ROWCOUNT执行批量MERGE - 但我不认为它对于300M行表来说足够快.
任何SQL查询提示都有帮助吗?
我能说......么?
Spark任务的数量等于Spark分区的数量?
执行程序运行一次(执行程序内部的批处理)是否等于一项任务?
每个任务只产生一个分区?
(重复 1。)
我开始学习Struts 2.我偶然发现了这段代码:
web.xml中
...some other codes...
<filter>
<filter-name>MyFilter</filter-name>
<display-name>MyFilter</display-name>
<filter-class>com.xxx.yyy.zzz.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<servlet-name>MyAction</servlet-name>
</filter-mapping>
<listener>
<listener-class>com.xxx.yyy.StrutsListener</listener-class>
</listener>
<servlet>
<servlet-name>MyAction</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>paramName1param-name>
<param-value>paramVal1</param-value>
</init-param>
<init-param>
<param-name>paramName2</param-name>
<param-value>paramVal2</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
...some other codes...
Run Code Online (Sandbox Code Playgroud)
我的问题在于这一部分
<filter-mapping>
<filter-name>MyFilter</filter-name>
<servlet-name>MyAction</servlet-name>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)
为什么servlet被映射到<filter-mapping>标签内?这种映射意味着什么?还有什么<listener>呢?谢谢你的回复.
我正在阅读JBoss中的这个示例,其中使用@RequestScopedbean备份JSF page来传递用户凭据信息,然后将其保存在@sessionScoped bean.以下是JBoss文档的示例.
@Named @RequestScoped
public class Credentials {
private String username;
private String password;
@NotNull @Length(min=3, max=25)
public String getUsername() { return username; }
public void setUsername(String username) { this.username = username; }
@NotNull @Length(min=6, max=20)
public String getPassword() { return password; }
public void setPassword(String password) { this.password = password; }
}
Run Code Online (Sandbox Code Playgroud)
JSF表格:
<h:form>
<h:panelGrid columns="2" rendered="#{!login.loggedIn}">
<f:validateBean>
<h:outputLabel for="username">Username:</h:outputLabel>
<h:inputText id="username" value="#{credentials.username}"/>
<h:outputLabel for="password">Password:</h:outputLabel>
<h:inputSecret id="password" …Run Code Online (Sandbox Code Playgroud) java ×4
apache-spark ×2
cdi ×2
jsf ×2
jsf-2 ×2
date ×1
ejb ×1
el ×1
jar ×1
java-8 ×1
java-ee ×1
java-time ×1
jsch ×1
managed-bean ×1
maven ×1
networking ×1
proxy ×1
scala ×1
servlets ×1
spark-submit ×1
sql-merge ×1
sql-update ×1
web.xml ×1