Skip to content

Instantly share code, notes, and snippets.

View scalactic's full-sized avatar

scalactic scalactic

  • Apple Inc.
View GitHub Profile
@scalactic
scalactic / python-multiprocessing-over-queue.py
Last active June 26, 2021 19:25
Python multprocessing implementation over multiprocessing.Queue
from multiprocessing import Pool, Process, Manager
import time
def writer(queue):
""" Queue writer worker """
# Produce data into the queue
for i in range(10000):
t = time.time()
print({'message': i, 'time': t, 'queue_size': queue.qsize()})
@scalactic
scalactic / python-process-return-value.py
Last active June 26, 2021 19:24
Getting python process return value
from multiprocessing import Process, Value
def func(val):
val.value = val.value * 2
return True
if __name__ == '__main__':
val = Value("l", 1, lock=False) # "l" -> typecode_or_type , 1 -> the value.
@scalactic
scalactic / python-multiprocessing-multiple-queue.py
Created June 26, 2021 19:33
Python multiprocessing multiple queue implementation
from multiprocessing import Pool, Process, Manager
import time
import logging
import os
logging.basicConfig(level=logging.INFO, format='[%(levelname)s] [%(asctime)s] [%(process)s] %(message)s', datefmt='%d/%m/%Y %I:%M:%S %p')
def writer(queue):
@scalactic
scalactic / base64_encoder_decoder.scala
Created June 28, 2021 13:21
Scala base64 encoder decoder
// Base64 encode
new String(java.util.Base64.getEncoder.encode("hello".getBytes()),java.nio.charset.StandardCharsets.UTF_8)
// Base64 decode
new String(java.util.Base64.getDecoder.decode("aGVsbG8=".getBytes()),java.nio.charset.StandardCharsets.UTF_8)
@scalactic
scalactic / encrypt_decrypt_AES.scala
Last active June 28, 2021 17:05
Scala encrypt decrpyt AES
import javax.crypto.{Cipher, KeyGenerator}
import javax.crypto.spec.SecretKeySpec
import java.util.Base64
val keyGenerator = KeyGenerator.getInstance("AES")
keyGenerator.init(128)
val secretKey = keyGenerator.generateKey
val encodedKey = Base64.getEncoder.encodeToString(secretKey.getEncoded)
val decodedKey = Base64.getDecoder.decode(encodedKey)
//spark-shell --conf spark.sql.sources.partitionOverwriteMode=dynamic
import org.apache.spark.sql.SaveMode
val data = Seq((1,2,"20210701"),(1,3,"20210701"),(3,4,"20210702"),(3,5,"20210702"))
val df = spark.createDataFrame(data).toDF("col_1", "col_2", "prt_date")
// this will create the table, with partitions 20210701, 20210702
df
.write
.partitionBy("prt_date")
@scalactic
scalactic / SparkDFWithSchema.scala
Created July 8, 2021 13:19
Create Spark DataFrame with given schema.
import org.apache.spark.sql.Row
import org.apache.spark.sql.types._
val schema = StructType(
Array(
StructField("key", StringType, nullable = false),
StructField("time", IntegerType, nullable = false)
)
)
@scalactic
scalactic / mergesort.js
Created July 9, 2021 17:30
merge sort in javascript
function merge(arr, l, m, r) {
let i, j, k;
let n1 = m - l + 1;
let n2 = r - m;
/* create temp arrays */
let L = new Array(n1);
let R = new Array(n2);
/* Copy data to temp arrays L[] and R[] */
for (i = 0; i < n1; i++)
L[i] = arr[l + i];
@scalactic
scalactic / SparkGenerateSchema.scala
Last active July 14, 2021 15:12
Generate schema from case class in spark
import org.apache.spark.sql.types.{StructType, ArrayType}
import org.apache.spark.sql.catalyst.ScalaReflection
/** Simple schema */
case class A(key: String, time: java.sql.Timestamp, date: java.sql.Date, decimal: java.math.BigDecimal, map: Map[String, Int], nested: Seq[Map[String, Seq[Int]]])
val schema = ScalaReflection.schemaFor[A].dataType.asInstanceOf[StructType]
schema.printTreeString
/** Array schema */
val arrSchema = ScalaReflection.schemaFor[Seq[A]].dataType.asInstanceOf[ArrayType]
@scalactic
scalactic / ILogging.scala
Last active September 26, 2021 09:00
Simple Java Logger
import java.sql.Timestamp
import java.util.logging.{ConsoleHandler, Formatter, Level, LogRecord, Logger}
trait ILogging {
private def setupLogger(level: Level): Logger = {
object SimpleFormatter extends Formatter {
override def format(record: LogRecord): String =
s"[${new Timestamp(record.getMillis)}] [${record.getLevel}] [${record.getLoggerName}] ${record.getMessage} \n"
}
val logger: Logger = Logger.getLogger(this.getClass.getName)