Получите уникальный идентификатор Потока в Java 1.4

В Pyspark вы можете сделать, как показано ниже

# create a data frame
df = sqlContext.createDataFrame(
[
("SirChillingtonIV", "20120104"), 
("Booooooo99900098", "20120104"), 
("Booooooo99900098", "20120106"), 
("OprahWinfreyJr", "20120110"), 
("SirChillingtonIV", "20120111"), 
("SirChillingtonIV", "20120114"), 
("SirChillingtonIV", "20120811")
], 
("user_name", "login_date"))


# Import functions
from pyspark.sql import functions as f

# Create data framew with new column new_date with data in desired format
df1 = df.withColumn("new_date", f.from_unixtime(f.unix_timestamp("login_date",'yyyyMMdd'),'yyyy-MM-dd'))
5
задан Michael Myers 31 March 2009 в 15:07
поделиться

4 ответа

Thread.getId (это может теоретически переполниться, но это определяется не к и на практике не будет).

1.5 проходит его Конец периода Срока службы теперь, но если Вы используете старые пыльные деки 1.4, затем можно реализовать собственное с ThreadLocal. (Отметьте, не следуйте за Java SE 6 документов API слишком тесно!)

8
ответ дан 18 December 2019 в 10:49
поделиться

Почему Вам нужно это? Поскольку в зависимости от Вашего ответа, существует несколько подходов.

Во-первых, поймите, что имя потока, как гарантируют, не будет уникально. Ни хэш-код идентификационных данных.

Если Вы действительно хотите связать уникальный идентификатор к потоку, Вы испытываете необходимость, чтобы сделать это сами. Вероятно, использование IdentityHashMap. Однако это представит сильную ссылку, что Вы не хотите иметь брожение вокруг в производственном приложении.

Править: TofuBeer имеет решение, это, вероятно, лучше, хотя документы отмечают, что идентификаторы потока могут быть снова использованы.

3
ответ дан 18 December 2019 в 10:49
поделиться

Можно использовать getID, если Вы находитесь на JDK 1.5 или выше.

Имеет место это, что Вам нужно последовательное значение в течение каждого раза, когда Вы выполняете модульные тесты, или просто уникальное достаточно хорошее значение?

2
ответ дан 18 December 2019 в 10:49
поделиться

Как упомянуто в "Thread.getId () глобальный вопрос об уникальности" ТАК вопрос, и подтвержденный исходным кодом Thread.java:

/* For generating thread ID */
private static long threadSeqNumber;

/* Set thread ID */
tid = nextThreadID();

private static synchronized long nextThreadID() {
    return ++threadSeqNumber;
}

Идентификатор потока очень прост реализовать себя, если Ваш находятся все еще в java1.4.
Однако эта реализация означает, что данный поток не будет иметь того же идентификатора, когда Вы запустите свою программу несколько раз.
Таким образом в зависимости от того, в чем Вы нуждаетесь, Вам, вероятно, придется проводить политику именования, которая является обоими:

  • уникальный для данной сессии во время выполнения
  • снова использованный от сессии до сессии
  • все еще связанный с внутренней исходной политикой именования, управляемой 1,4 JVM ("Распараллеливают 1", "Поток 2"...),
3
ответ дан 18 December 2019 в 10:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: