#node js 설치
sudo apt-get install curl
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
sudo apt-get install -y nodejs
#실행
node *.js
#간단한 서버
var http = require('http');
var server = http.createServer(function (req, res) {
res.writeHead(200, { 'Content-Type' : 'text/plain' });
res.end('Hello World');
});
server.listen(8000);
#끝.
2016년 5월 4일 수요일
spark-hbase-connector 사용법
참조 : https://github.com/nerdammer/spark-hbase-connector
/*
spark-shell 을 이용해야 해서 git clone 으로 프로젝트 빌드를 수행
*/
//hbase의 라이브러리를 CLASSPATH에 지정
export CLASSPATH=/usr/local/hbase/lib/*
//실행 옵션. 빌드한 spark-hbase-connector의 jar파일 지정
spark-shell --jars /usr/local/spark/spark-hbase-connector_2.10-1.0.2.jar
import it.nerdammer.spark.hbase._
/*
hbase내의 테이블의 특정 컬럼패밀리에 특정 qualifier를 지정해서 받아오는 소스
1.타입 지정 : [(String,...)] -> qualifier 수 만큼 있다면 차례로 들어가고 1개 더많으면 가장앞이 row key값 (테이블명)
2.select : 데이터를 받고 싶은 qualifier 이름 지정
3. inColumnFamily : 컬럼 패밀리를 지정
결과 : rdd = Array[String,String,String] 형태로 들어간다고 이해 하면 됨
*/
val rdd =sc.hbaseTable[(String,String,String)]("T_NAME").select("Q1","Q2").inColumnFamily("CF_Name")
/*
다른 컬럼패밀리의 qualifier를 받아오고 싶을때
select 에서 다른 컬럼패밀리 이름을 지정
*/
val rdd =sc.hbaseTable[(String,String,String,String)]("T_NAME").select("Q1","Q2","otherCF:Q3").inColumnFamily("CF_Name")
/*
RDD를 hbase에 저장 할때
1. toHBaseTable : 저장할 테이블 명
2. toColumns : qualifier 명
3. inColumnFamily : 컬럼 패밀리 명
*/
rdd.toHBaseTable("T_NAME").toColumns("Q1","Q2").inColumnFamily("CF_NAME").save()
/*
spark-shell 을 이용해야 해서 git clone 으로 프로젝트 빌드를 수행
*/
//hbase의 라이브러리를 CLASSPATH에 지정
export CLASSPATH=/usr/local/hbase/lib/*
//실행 옵션. 빌드한 spark-hbase-connector의 jar파일 지정
spark-shell --jars /usr/local/spark/spark-hbase-connector_2.10-1.0.2.jar
import it.nerdammer.spark.hbase._
/*
hbase내의 테이블의 특정 컬럼패밀리에 특정 qualifier를 지정해서 받아오는 소스
1.타입 지정 : [(String,...)] -> qualifier 수 만큼 있다면 차례로 들어가고 1개 더많으면 가장앞이 row key값 (테이블명)
2.select : 데이터를 받고 싶은 qualifier 이름 지정
3. inColumnFamily : 컬럼 패밀리를 지정
결과 : rdd = Array[String,String,String] 형태로 들어간다고 이해 하면 됨
*/
val rdd =sc.hbaseTable[(String,String,String)]("T_NAME").select("Q1","Q2").inColumnFamily("CF_Name")
/*
다른 컬럼패밀리의 qualifier를 받아오고 싶을때
select 에서 다른 컬럼패밀리 이름을 지정
*/
val rdd =sc.hbaseTable[(String,String,String,String)]("T_NAME").select("Q1","Q2","otherCF:Q3").inColumnFamily("CF_Name")
/*
RDD를 hbase에 저장 할때
1. toHBaseTable : 저장할 테이블 명
2. toColumns : qualifier 명
3. inColumnFamily : 컬럼 패밀리 명
*/
rdd.toHBaseTable("T_NAME").toColumns("Q1","Q2").inColumnFamily("CF_NAME").save()
[Python]Google Scholar 에서 인용수를 얻는 방법
/*
논문의 인용수를 마땅히 받아 올 곳이 없음...
python으로 간단하게 인용수 수집 구현
argv[1] = 논문 제목
문제 : 구글 자체적으로 시간당 트래픽 40개가 넘어가면 로봇으로 감지.
IP가 막혀서 해당 사이트 검색 불가 -> 로봇 검증 해지해야 함.
해결 방안 : 1. 트래픽 구매 ( 한달에 5만건 : 250 불)
2. 제한 된 트래픽에서 계속 실행 (한달 full로 요청 하면 28,800건 가능)
결과 : 문제시 자삭
*/
import pycurl
import cStringIO
import sys
arg1 = sys.argv[1]
print arg1
buf = cStringIO.StringIO()
c = pycurl.Curl()
c.setopt(c.URL, 'https://scholar.google.co.kr/scholar?q='+arg1)
c.setopt(c.WRITEFUNCTION, buf.write)
c.perform()
string = buf.getvalue()
index = string.find("\"gs_fl\">") #find id = gs_fl div tag
string2 = string[index+8:]
index2 = string2.find(">") # find end of a tag
string3 = string2[index2+1:]
index3 = string3.find(" ") # find void
print string3[0:index3][0:-1]
buf.close()
논문의 인용수를 마땅히 받아 올 곳이 없음...
python으로 간단하게 인용수 수집 구현
argv[1] = 논문 제목
문제 : 구글 자체적으로 시간당 트래픽 40개가 넘어가면 로봇으로 감지.
IP가 막혀서 해당 사이트 검색 불가 -> 로봇 검증 해지해야 함.
해결 방안 : 1. 트래픽 구매 ( 한달에 5만건 : 250 불)
2. 제한 된 트래픽에서 계속 실행 (한달 full로 요청 하면 28,800건 가능)
결과 : 문제시 자삭
*/
import pycurl
import cStringIO
import sys
arg1 = sys.argv[1]
print arg1
buf = cStringIO.StringIO()
c = pycurl.Curl()
c.setopt(c.URL, 'https://scholar.google.co.kr/scholar?q='+arg1)
c.setopt(c.WRITEFUNCTION, buf.write)
c.perform()
string = buf.getvalue()
index = string.find("\"gs_fl\">") #find id = gs_fl div tag
string2 = string[index+8:]
index2 = string2.find(">") # find end of a tag
string3 = string2[index2+1:]
index3 = string3.find(" ") # find void
print string3[0:index3][0:-1]
buf.close()
Spark-postgreSQL 연동
//Spark 실행할때 jdbc jar를 지정
/*
spark shell --driver-class-path /usr/share/java/postgresql93-jdbc.jar
/*
/*
DOMAIN_NAME : ip 혹은 도메인
DATABASE_NAME : 접속할 Database 이름
USER_NAME : 유저 명
PASSWORD : 비밀번호
변수를 만들어서 입력 / 하드코딩
*/
*/
val url = "jdbc:postgresql://DOMAIN_NAME/DATABASE_NAME?user=USER_NAME&password=PASSWORD"
/*
TABLE_NAME : 데이터를 가져올 테이블 명
rows : RDD 형태로 반환 (FROM 절을 구현한것)
*/
*/
val rows = sqlContext.load("jdbc", Map("url" -> url ,"dbtable"->"TABLE_NAME"))
/*
filter 함수 에서 WHERE 절을 구현
filter 함수 에서 WHERE 절을 구현
select 함수 에서 SELECT 절을 구현
*/
*/
row.filter("COLUMN_NAME like 'test'").select("col1","col2")
/*
다시 테이블에 저장하는 소스
*/
import org.apache.spark.sql.Row;
import org.apache.spark.sql.types.{StructType,StructField,StringType};
/*
저장 할 테이블에 컬럼 명을 공백을 두고 생성
schema에서 StructType 타입으로 변경 됨
*/
val schemaString = "col1 col2 col3"
val schema =
StructType(
schemaString.split(" ").map(fieldName => StructField(fieldName, StringType, true)))
/*
데이터 (rdd) Row 형태로 변환
테스트에서는 "data1_data2_data3" 을 하나의 로우로 가진 것을 이용
*/
val rowRDD = rdd.map(_.split("_")).map(p => Row(p(0),p(1),p(2)))
/*
dfr : Row로 변환된 rdd와 schema로 Data Frame 생성 (Spark DF의 연산들을 모두 사용 가능)
insertIntoJDBC : postgreSQL에 저장하는 함수, 세번째 인자로 true를 주면 기존 테이블 삭
제 하고 다시 생성 함
*/
val dfr = sqlContext.createDataFrame(rowRDD, schema)
dfr.insertIntoJDBC(url, "TABLE_NAME", true)
참조 : https://eradiating.wordpress.com/2015/04/17/using-spark-data-sources-to-load-data-from-postgresql/
/*
다시 테이블에 저장하는 소스
*/
import org.apache.spark.sql.Row;
import org.apache.spark.sql.types.{StructType,StructField,StringType};
/*
저장 할 테이블에 컬럼 명을 공백을 두고 생성
schema에서 StructType 타입으로 변경 됨
*/
val schemaString = "col1 col2 col3"
val schema =
StructType(
schemaString.split(" ").map(fieldName => StructField(fieldName, StringType, true)))
/*
데이터 (rdd) Row 형태로 변환
테스트에서는 "data1_data2_data3" 을 하나의 로우로 가진 것을 이용
*/
val rowRDD = rdd.map(_.split("_")).map(p => Row(p(0),p(1),p(2)))
/*
dfr : Row로 변환된 rdd와 schema로 Data Frame 생성 (Spark DF의 연산들을 모두 사용 가능)
insertIntoJDBC : postgreSQL에 저장하는 함수, 세번째 인자로 true를 주면 기존 테이블 삭
제 하고 다시 생성 함
*/
val dfr = sqlContext.createDataFrame(rowRDD, schema)
dfr.insertIntoJDBC(url, "TABLE_NAME", true)
참조 : https://eradiating.wordpress.com/2015/04/17/using-spark-data-sources-to-load-data-from-postgresql/
[postgreSQL] DDL _ 현재시간을 갖는 컬럼 CREATE 문
CREATE TABLE R_ST_TOTAL_PAPER(tPaper_S_key serial primary key, tPaper int, insertDate date not null default now());
//간단하게 default now() 때려 버리면 됨.
//간단하게 default now() 때려 버리면 됨.
[Java] SQL query 인자 전달
//자바에서 SQL에 인자 형태로 값전달
private int getXNum(String s, String table)
{
try {
String squery = "select num from " + table + " where name = ?";
PreparedStatement spstmt = null;
spstmt = con.prepareStatement(squery);
spstmt.setString(1, s);
rs = spstmt.executeQuery();
if (rs.next()) {
return rs.getInt("num");
}
} catch (Exception e) {
// TODO: handle exception
e. printStackTrace();
}
return -1;
}
private int getXNum(String s, String table)
{
try {
String squery = "select num from " + table + " where name = ?";
PreparedStatement spstmt = null;
spstmt = con.prepareStatement(squery);
spstmt.setString(1, s);
rs = spstmt.executeQuery();
if (rs.next()) {
return rs.getInt("num");
}
} catch (Exception e) {
// TODO: handle exception
e. printStackTrace();
}
return -1;
}
2015년 9월 4일 금요일
JavaScript..
// simple %Y-%M-%D
new Date().toJSON().slice(0,10)
More
//print html
<div id="printme">
...
</div>
function printIt(printThis) {
var win=null;
win = window.open('','offprint','width=810px height=882px');
self.focus();
win.document.open();
win.document.write('<'+'!DOCTYPE html'+' PUBLIC '+'-//W3C//DTD XHTML 1.0 Transitional//EN '+'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd >');
win.document.write("<html xmlns='http://www.w3.org/1999/xhtml'><head>");
win.document.write("<meta http-equiv='X-UA-Compatible' content='IE=edge' />");
win.document.write("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />");
win.document.write('<link rel=stylesheet type="text/css" href="/css/admin/reset.css" />');
win.document.write('<link href="/css/admin/jquery-ui-1.8.21.custom.css" rel="stylesheet" />');
win.document.write('<link rel="stylesheet" type="text/css" href="/css/admin/common.css" />');
win.document.write('<link rel="stylesheet" type="text/css" href="/css/admin/contents.css" /> ');
win.document.write('<scr' + 'ipt language="javascript" type="text/javascript" src="/js/admin/jquery-1.8.1.min.js"></scr' + 'ipt>');
win.document.write('<scr' + 'ipt language="javascript" type="text/javascript" src="/js/admin/jquery-ui-1.8.21.custom.min.js"></scr' + 'ipt>');
win.document.write('<scr' + 'ipt language="javascript" type="text/javascript" src="/js/admin/layout.js"></scr' + 'ipt>');
win.document.write("</head><body>");
win.document.write('<div id="wrap1">');
win.document.write('<div id="container">');
win.document.write('<div class="content">');
win.document.write('<div class="pg_navi">');
win.document.write('</div>');
win.document.write(printThis);
win.document.write('</div>');
win.document.write("</body></html>");
win.document.close();
win.focus();
win.print();
}
new Date().toJSON().slice(0,10)
More
//print html
<div id="printme">
...
</div>
function printIt(printThis) {
var win=null;
win = window.open('','offprint','width=810px height=882px');
self.focus();
win.document.open();
win.document.write('<'+'!DOCTYPE html'+' PUBLIC '+'-//W3C//DTD XHTML 1.0 Transitional//EN '+'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd >');
win.document.write("<html xmlns='http://www.w3.org/1999/xhtml'><head>");
win.document.write("<meta http-equiv='X-UA-Compatible' content='IE=edge' />");
win.document.write("<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />");
win.document.write('<link rel=stylesheet type="text/css" href="/css/admin/reset.css" />');
win.document.write('<link href="/css/admin/jquery-ui-1.8.21.custom.css" rel="stylesheet" />');
win.document.write('<link rel="stylesheet" type="text/css" href="/css/admin/common.css" />');
win.document.write('<link rel="stylesheet" type="text/css" href="/css/admin/contents.css" /> ');
win.document.write('<scr' + 'ipt language="javascript" type="text/javascript" src="/js/admin/jquery-1.8.1.min.js"></scr' + 'ipt>');
win.document.write('<scr' + 'ipt language="javascript" type="text/javascript" src="/js/admin/jquery-ui-1.8.21.custom.min.js"></scr' + 'ipt>');
win.document.write('<scr' + 'ipt language="javascript" type="text/javascript" src="/js/admin/layout.js"></scr' + 'ipt>');
win.document.write("</head><body>");
win.document.write('<div id="wrap1">');
win.document.write('<div id="container">');
win.document.write('<div class="content">');
win.document.write('<div class="pg_navi">');
win.document.write('</div>');
win.document.write(printThis);
win.document.write('</div>');
win.document.write("</body></html>");
win.document.close();
win.focus();
win.print();
}
피드 구독하기:
글 (Atom)